cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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 */