• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/**
2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#define CALLEE_SAVED_GP_REGS_COUNT 10
17
18.extern printf
19
20.macro PUSH_CALLER_REGS
21    stp x0, x1, [sp, #-16]!
22    stp x2, x3, [sp, #-16]!
23    stp x4, x5, [sp, #-16]!
24    stp x6, x7, [sp, #-16]!
25    stp x8, x9, [sp, #-16]!
26    stp x10, x11, [sp, #-16]!
27    stp x12, x13, [sp, #-16]!
28    stp x14, x15, [sp, #-16]!
29.endm
30
31.macro POP_CALLER_REGS
32    ldp x14, x15, [sp], #16
33    ldp x12, x13, [sp], #16
34    ldp x10, x11, [sp], #16
35    ldp x8, x9, [sp], #16
36    ldp x6, x7, [sp], #16
37    ldp x4, x5, [sp], #16
38    ldp x2, x3, [sp], #16
39    ldp x0, x1, [sp], #16
40.endm
41
42.macro PUSH_CALLER_VREGS
43    stp d0, d1, [sp, #-16]!
44    stp d2, d3, [sp, #-16]!
45    stp d4, d5, [sp, #-16]!
46    stp d6, d7, [sp, #-16]!
47    stp d16, d17, [sp, #-16]!
48    stp d18, d19, [sp, #-16]!
49    stp d20, d21, [sp, #-16]!
50    stp d22, d23, [sp, #-16]!
51    stp d24, d25, [sp, #-16]!
52    stp d26, d27, [sp, #-16]!
53    stp d28, d29, [sp, #-16]!
54    stp d30, d31, [sp, #-16]!
55.endm
56
57.macro POP_CALLER_VREGS
58    ldp d30, d31, [sp], #16
59    ldp d28, d29, [sp], #16
60    ldp d26, d27, [sp], #16
61    ldp d24, d25, [sp], #16
62    ldp d22, d23, [sp], #16
63    ldp d20, d21, [sp], #16
64    ldp d18, d19, [sp], #16
65    ldp d16, d17, [sp], #16
66    ldp d6, d7, [sp], #16
67    ldp d4, d5, [sp], #16
68    ldp d2, d3, [sp], #16
69    ldp d0, d1, [sp], #16
70.endm
71
72.macro PUSH_ARGS_REGS
73    stp x6, x7, [sp, #-16]!
74    stp x4, x5, [sp, #-16]!
75    stp x2, x3, [sp, #-16]!
76    stp x0, x1, [sp, #-16]!
77.endm
78
79.macro POP_ARGS_REGS
80    ldp x0, x1, [sp], #16
81    ldp x2, x3, [sp], #16
82    ldp x4, x5, [sp], #16
83    ldp x6, x7, [sp], #16
84.endm
85
86.macro PUSH_ARGS_VREGS
87    stp d0, d1, [sp, #-16]!
88    stp d2, d3, [sp, #-16]!
89    stp d4, d5, [sp, #-16]!
90    stp d6, d7, [sp, #-16]!
91.endm
92
93.macro POP_ARGS_VREGS
94    ldp d6, d7, [sp], #16
95    ldp d4, d5, [sp], #16
96    ldp d2, d3, [sp], #16
97    ldp d0, d1, [sp], #16
98.endm
99
100.macro PUSH_CALLEE_REGS base_reg
101    stp x27, x28, [\base_reg, #-16]!
102    stp x25, x26, [\base_reg, #-16]!
103    stp x23, x24, [\base_reg, #-16]!
104    stp x21, x22, [\base_reg, #-16]!
105    stp x19, x20, [\base_reg, #-16]!
106    stp d14, d15, [\base_reg, #-16]!
107    stp d12, d13, [\base_reg, #-16]!
108    stp d10, d11, [\base_reg, #-16]!
109    stp d8, d9, [\base_reg, #-16]!
110.endm
111
112.macro POP_CALLEE_REGS base_reg
113    ldp d8, d9, [\base_reg], #16
114    ldp d10, d11, [\base_reg], #16
115    ldp d12, d13, [\base_reg], #16
116    ldp d14, d15, [\base_reg], #16
117    ldp x19, x20, [\base_reg], #16
118    ldp x21, x22, [\base_reg], #16
119    ldp x23, x24, [\base_reg], #16
120    ldp x25, x26, [\base_reg], #16
121    ldp x27, x28, [\base_reg], #16
122.endm
123
124.macro BEGIN_CALL
125    PUSH_CALLER_REGS
126.endm
127
128.macro LARG0 v
129    ldr x0, =\v
130.endm
131
132.macro ARG0 v
133    mov x0, \v
134.endm
135
136.macro ARG1 v
137    mov x1, \v
138.endm
139
140.macro ARG2 v
141    mov x2, \v
142.endm
143
144.macro END_CALL func
145    bl \func
146    POP_CALLER_REGS
147.endm
148
149.macro LOG3 fmt, arg1, arg2
150    BEGIN_CALL
151        LARG0 \fmt
152        ARG1 \arg1
153        ARG2 \arg2
154    END_CALL LogEntrypoint
155.endm
156
157.macro ABORT
158    brk 0
159.endm
160
161.macro ASSERT_REGS_CMP reg1, reg2, pred
162#ifndef NDEBUG
163    cmp \reg1, \reg2
164    b\pred 1f
165    ABORT
1661:
167#endif
168.endm
169