18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci// Copyright (C) 2015-2019 ARM Limited. 38c2ecf20Sopenharmony_ci// Original author: Dave Martin <Dave.Martin@arm.com> 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#ifndef ASSEMBLER_H 68c2ecf20Sopenharmony_ci#define ASSEMBLER_H 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci.macro __for from:req, to:req 98c2ecf20Sopenharmony_ci .if (\from) == (\to) 108c2ecf20Sopenharmony_ci _for__body %\from 118c2ecf20Sopenharmony_ci .else 128c2ecf20Sopenharmony_ci __for \from, %(\from) + ((\to) - (\from)) / 2 138c2ecf20Sopenharmony_ci __for %(\from) + ((\to) - (\from)) / 2 + 1, \to 148c2ecf20Sopenharmony_ci .endif 158c2ecf20Sopenharmony_ci.endm 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci.macro _for var:req, from:req, to:req, insn:vararg 188c2ecf20Sopenharmony_ci .macro _for__body \var:req 198c2ecf20Sopenharmony_ci .noaltmacro 208c2ecf20Sopenharmony_ci \insn 218c2ecf20Sopenharmony_ci .altmacro 228c2ecf20Sopenharmony_ci .endm 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci .altmacro 258c2ecf20Sopenharmony_ci __for \from, \to 268c2ecf20Sopenharmony_ci .noaltmacro 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci .purgem _for__body 298c2ecf20Sopenharmony_ci.endm 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci.macro function name 328c2ecf20Sopenharmony_ci .macro endfunction 338c2ecf20Sopenharmony_ci .type \name, @function 348c2ecf20Sopenharmony_ci .purgem endfunction 358c2ecf20Sopenharmony_ci .endm 368c2ecf20Sopenharmony_ci\name: 378c2ecf20Sopenharmony_ci.endm 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci.macro define_accessor name, num, insn 408c2ecf20Sopenharmony_ci .macro \name\()_entry n 418c2ecf20Sopenharmony_ci \insn \n, 1 428c2ecf20Sopenharmony_ci ret 438c2ecf20Sopenharmony_ci .endm 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_cifunction \name 468c2ecf20Sopenharmony_ci adr x2, .L__accessor_tbl\@ 478c2ecf20Sopenharmony_ci add x2, x2, x0, lsl #3 488c2ecf20Sopenharmony_ci br x2 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci.L__accessor_tbl\@: 518c2ecf20Sopenharmony_ci _for x, 0, (\num) - 1, \name\()_entry \x 528c2ecf20Sopenharmony_ciendfunction 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ci .purgem \name\()_entry 558c2ecf20Sopenharmony_ci.endm 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci#endif /* ! ASSEMBLER_H */ 58