[libc] Switch to using the generic `<gpuintrin.h>` implementations (#121810)
[llvm-project.git] / compiler-rt / lib / xray / xray_trampoline_riscv64.S
blob692350eaaa38e09d3ee4814a86ff42f84a7a6c30
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.
11 // This implements the riscv64-specific assembler for the trampolines.
13 //===----------------------------------------------------------------------===//
15 #include "../sanitizer_common/sanitizer_asm.h"
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
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
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
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
85 .macro LOAD_XLEN, rd, src
86         ld      \rd, \src
87 .endm
89 #include "xray_trampoline_riscv_common.S"