162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci// Copyright (C) 2015-2019 ARM Limited. 362306a36Sopenharmony_ci// Original author: Dave Martin <Dave.Martin@arm.com> 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#ifndef ASSEMBLER_H 662306a36Sopenharmony_ci#define ASSEMBLER_H 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci.macro __for from:req, to:req 962306a36Sopenharmony_ci .if (\from) == (\to) 1062306a36Sopenharmony_ci _for__body %\from 1162306a36Sopenharmony_ci .else 1262306a36Sopenharmony_ci __for \from, %(\from) + ((\to) - (\from)) / 2 1362306a36Sopenharmony_ci __for %(\from) + ((\to) - (\from)) / 2 + 1, \to 1462306a36Sopenharmony_ci .endif 1562306a36Sopenharmony_ci.endm 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci.macro _for var:req, from:req, to:req, insn:vararg 1862306a36Sopenharmony_ci .macro _for__body \var:req 1962306a36Sopenharmony_ci .noaltmacro 2062306a36Sopenharmony_ci \insn 2162306a36Sopenharmony_ci .altmacro 2262306a36Sopenharmony_ci .endm 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci .altmacro 2562306a36Sopenharmony_ci __for \from, \to 2662306a36Sopenharmony_ci .noaltmacro 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci .purgem _for__body 2962306a36Sopenharmony_ci.endm 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci.macro function name 3262306a36Sopenharmony_ci .macro endfunction 3362306a36Sopenharmony_ci .type \name, @function 3462306a36Sopenharmony_ci .purgem endfunction 3562306a36Sopenharmony_ci .endm 3662306a36Sopenharmony_ci\name: 3762306a36Sopenharmony_ci.endm 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci.macro define_accessor name, num, insn 4062306a36Sopenharmony_ci .macro \name\()_entry n 4162306a36Sopenharmony_ci \insn \n, 1 4262306a36Sopenharmony_ci ret 4362306a36Sopenharmony_ci .endm 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cifunction \name 4662306a36Sopenharmony_ci adr x2, .L__accessor_tbl\@ 4762306a36Sopenharmony_ci add x2, x2, x0, lsl #3 4862306a36Sopenharmony_ci br x2 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci.L__accessor_tbl\@: 5162306a36Sopenharmony_ci _for x, 0, (\num) - 1, \name\()_entry \x 5262306a36Sopenharmony_ciendfunction 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci .purgem \name\()_entry 5562306a36Sopenharmony_ci.endm 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci// Utility macro to print a literal string 5862306a36Sopenharmony_ci// Clobbers x0-x4,x8 5962306a36Sopenharmony_ci.macro puts string 6062306a36Sopenharmony_ci .pushsection .rodata.str1.1, "aMS", @progbits, 1 6162306a36Sopenharmony_ci.L__puts_literal\@: .string "\string" 6262306a36Sopenharmony_ci .popsection 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci ldr x0, =.L__puts_literal\@ 6562306a36Sopenharmony_ci bl puts 6662306a36Sopenharmony_ci.endm 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci#endif /* ! ASSEMBLER_H */ 69