xref: /freebsd/contrib/llvm-project/compiler-rt/lib/xray/xray_trampoline_riscv32.S (revision 700637cbb5e582861067a11aaca4d053546871d2)
1//===-- xray_trampoline_riscv32.s ----------------------------------*- ASM -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file is a part of XRay, a dynamic runtime instrumentation system.
10//
11// This implements the riscv32-specific assembler for the trampolines.
12//
13//===----------------------------------------------------------------------===//
14
15#include "../sanitizer_common/sanitizer_asm.h"
16
17.macro SAVE_ARG_REGISTERS
18	// Push argument registers to stack
19	addi	sp, sp, -112
20        CFI_DEF_CFA_OFFSET(112)
21	sw	ra, 108(sp)
22	sw	a7, 104(sp)
23	sw	a6, 100(sp)
24	sw	a5, 96(sp)
25	sw	a4, 92(sp)
26	sw	a3, 88(sp)
27	sw	a2, 84(sp)
28	sw	a1, 80(sp)
29	sw	a0, 76(sp)
30	fsd	fa7, 64(sp)
31	fsd	fa6, 56(sp)
32	fsd	fa5, 48(sp)
33	fsd	fa4, 40(sp)
34	fsd	fa3, 32(sp)
35	fsd	fa2, 24(sp)
36	fsd	fa1, 16(sp)
37	fsd	fa0, 8(sp)
38.endm
39
40.macro RESTORE_ARG_REGISTERS
41	// Restore argument registers
42	fld	fa0, 8(sp)
43	fld	fa1, 16(sp)
44	fld	fa2, 24(sp)
45	fld	fa3, 32(sp)
46	fld	fa4, 40(sp)
47	fld	fa5, 48(sp)
48	fld	fa6, 56(sp)
49	fld	fa7, 64(sp)
50	lw	a0, 76(sp)
51	lw	a1, 80(sp)
52	lw	a2, 84(sp)
53	lw	a3, 88(sp)
54	lw	a4, 92(sp)
55	lw	a5, 96(sp)
56	lw	a6, 100(sp)
57	lw	a7, 104(sp)
58	lw	ra, 108(sp)
59	addi	sp, sp, 112
60        CFI_DEF_CFA_OFFSET(0)
61.endm
62
63.macro SAVE_RET_REGISTERS
64	// Push return registers to stack
65	addi	sp, sp, -32
66        CFI_DEF_CFA_OFFSET(32)
67	sw	ra, 28(sp)
68	sw	a1, 24(sp)
69	sw	a0, 20(sp)
70	fsd	fa1, 8(sp)
71	fsd	fa0, 0(sp)
72.endm
73
74.macro RESTORE_RET_REGISTERS
75	// Restore return registers
76	fld	fa0, 0(sp)
77	fld	fa1, 8(sp)
78	lw	a0, 20(sp)
79	lw	a1, 24(sp)
80	lw	ra, 28(sp)
81	addi	sp, sp, 32
82        CFI_DEF_CFA_OFFSET(0)
83.endm
84
85.macro LOAD_XLEN, rd, src
86        lw      \rd, \src
87.endm
88
89#include "xray_trampoline_riscv_common.S"
90