xref: /freebsd/contrib/llvm-project/compiler-rt/lib/xray/xray_trampoline_riscv64.S (revision 700637cbb5e582861067a11aaca4d053546871d2)
1//===-- xray_trampoline_riscv64.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 riscv64-specific assembler for the trampolines.
12//
13//===----------------------------------------------------------------------===//
14
15#include "../sanitizer_common/sanitizer_asm.h"
16
17.macro SAVE_ARG_REGISTERS
18	// Push return registers to stack
19	addi	sp, sp, -144
20        CFI_DEF_CFA_OFFSET(144)
21        sd	ra, 136(sp)
22        sd	a7, 128(sp)
23        sd	a6, 120(sp)
24        sd	a5, 112(sp)
25        sd	a4, 104(sp)
26        sd	a3, 96(sp)
27        sd	a2, 88(sp)
28        sd	a1, 80(sp)
29        sd	a0, 72(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 SAVE_RET_REGISTERS
41	// Push return registers to stack
42        addi    sp, sp, -48
43        CFI_DEF_CFA_OFFSET(48)
44        sd      ra, 40(sp)
45        sd      a1, 32(sp)
46        sd      a0, 24(sp)
47        fsd     fa1, 16(sp)
48        fsd     fa0, 8(sp)
49.endm
50
51.macro RESTORE_RET_REGISTERS
52	// Restore return registers
53        fld     fa0, 8(sp)
54        fld     fa1, 16(sp)
55        ld      a0, 24(sp)
56        ld      a1, 32(sp)
57        ld      ra, 40(sp)
58        addi    sp, sp, 48
59        CFI_DEF_CFA_OFFSET(0)
60.endm
61
62.macro RESTORE_ARG_REGISTERS
63        // Restore argument registers
64	fld	fa0, 8(sp)
65	fld	fa1, 16(sp)
66	fld	fa2, 24(sp)
67	fld	fa3, 32(sp)
68	fld	fa4, 40(sp)
69	fld	fa5, 48(sp)
70	fld	fa6, 56(sp)
71	fld	fa7, 64(sp)
72	ld	a0, 72(sp)
73	ld	a1, 80(sp)
74	ld	a2, 88(sp)
75	ld	a3, 96(sp)
76	ld	a4, 104(sp)
77	ld	a5, 112(sp)
78	ld	a6, 120(sp)
79	ld	a7, 128(sp)
80	ld	ra, 136(sp)
81	addi	sp, sp, 144
82        CFI_DEF_CFA_OFFSET(0)
83.endm
84
85.macro LOAD_XLEN, rd, src
86        ld      \rd, \src
87.endm
88
89#include "xray_trampoline_riscv_common.S"
90