assembler.h (1188B)
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 45function \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 52endfunction 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", 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 */