diff options
Diffstat (limited to 'tools/testing/selftests/arm64/fp/assembler.h')
| -rw-r--r-- | tools/testing/selftests/arm64/fp/assembler.h | 57 | 
1 files changed, 57 insertions, 0 deletions
diff --git a/tools/testing/selftests/arm64/fp/assembler.h b/tools/testing/selftests/arm64/fp/assembler.h new file mode 100644 index 000000000000..8944f2189206 --- /dev/null +++ b/tools/testing/selftests/arm64/fp/assembler.h @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Copyright (C) 2015-2019 ARM Limited. +// Original author: Dave Martin <Dave.Martin@arm.com> + +#ifndef ASSEMBLER_H +#define ASSEMBLER_H + +.macro __for from:req, to:req +	.if (\from) == (\to) +		_for__body %\from +	.else +		__for \from, %(\from) + ((\to) - (\from)) / 2 +		__for %(\from) + ((\to) - (\from)) / 2 + 1, \to +	.endif +.endm + +.macro _for var:req, from:req, to:req, insn:vararg +	.macro _for__body \var:req +		.noaltmacro +		\insn +		.altmacro +	.endm + +	.altmacro +	__for \from, \to +	.noaltmacro + +	.purgem _for__body +.endm + +.macro function name +	.macro endfunction +		.type \name, @function +		.purgem endfunction +	.endm +\name: +.endm + +.macro define_accessor name, num, insn +	.macro \name\()_entry n +		\insn \n, 1 +		ret +	.endm + +function \name +	adr	x2, .L__accessor_tbl\@ +	add	x2, x2, x0, lsl #3 +	br	x2 + +.L__accessor_tbl\@: +	_for x, 0, (\num) - 1, \name\()_entry \x +endfunction + +	.purgem \name\()_entry +.endm + +#endif /* ! ASSEMBLER_H */  | 
