1 // SPDX-License-Identifier: GPL-2.0-only 2 // Copyright (C) 2015-2019 ARM Limited. 3 // Original author: Dave Martin <Dave.Martin@arm.com> 4 5 #ifndef ASSEMBLER_H 6 #define ASSEMBLER_H 7 8 .macro __for from:req, to:req 9 .if (\from) == (\to) 10 _for__body %\from 11 .else 12 __for \from, %(\from) + ((\to) - (\from)) / 2 13 __for %(\from) + ((\to) - (\from)) / 2 + 1, \to 14 .endif 15 .endm 16 17 .macro _for var:req, from:req, to:req, insn:vararg 18 .macro _for__body \var:req 19 .noaltmacro 20 \insn 21 .altmacro 22 .endm 23 24 .altmacro 25 __for \from, \to 26 .noaltmacro 27 28 .purgem _for__body 29 .endm 30 31 .macro function name 32 .macro endfunction 33 .type \name, @function 34 .purgem endfunction 35 .endm 36 \name: 37 .endm 38 39 .macro define_accessor name, num, insn 40 .macro \name\()_entry n 41 \insn \n, 1 42 ret 43 .endm 44 45 function \name 46 adr x2, .L__accessor_tbl\@ 47 add x2, x2, x0, lsl #3 48 br x2 49 50 .L__accessor_tbl\@: 51 _for x, 0, (\num) - 1, \name\()_entry \x 52 endfunction 53 54 .purgem \name\()_entry 55 .endm 56 57 // Utility macro to print a literal string 58 // Clobbers x0-x4,x8 59 .macro puts string 60 .pushsection .rodata.str1.1, "aMS", @progbits, 1 61 .L__puts_literal\@: .string "\string" 62 .popsection 63 64 ldr x0, =.L__puts_literal\@ 65 bl puts 66 .endm 67 68 #endif /* ! ASSEMBLER_H */ 69