1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
#ifndef __LA64_MAPPING_H__
#define __LA64_MAPPING_H__
// LA64 Register Mapping Scheme
/*****************************************************************************************
name alias mapping native description Box64 description saver
******************************************************************************************
r0 zero native zero Hard-wired zero N/A -
r1 ra native ra Return address N/A Caller
r2 tp - Thread pointer N/A -
r3 sp native sp Stack pointer N/A Callee
r4 a0 RDI Function argument/return val. - Caller
r5 a1 RSI Function argument/return val. - Caller
r6 a2 RDX Function argument - Caller
r7 a3 RCX Function argument - Caller
r8 a4 R8 Function argument - Caller
r9 a5 R9 Function argument - Caller
r10 a6 RBX Function argument - Caller
r11 a7 RSP Function argument - Caller
r12 t0 RAX Temporary - Caller
r13 t1 RBP Temporary - Caller
r14 t2 x1 Temporary Scratch Caller
r15 t3 x2 Temporary Scratch Caller
r16 t4 x3 Temporary Scratch Caller
r17 t5 x4 Temporary Scratch Caller
r18 t6 x5 Temporary Scratch Caller
r19 t7 x6 Temporary Scratch Caller
r20 t8 x7 Temporary Scratch Caller
r21 rx - Reserved X87 Precision Control -
r22 fp SavedSP Saved register/frame pointer - Callee
r23 s0 R10 Saved register - Callee
r24 s1 R11 Saved register - Callee
r25 s2 R12 Saved register - Callee
r26 s3 R13 Saved register - Callee
r27 s4 R14 Saved register - Callee
r28 s5 R15 Saved register - Callee
r29 s6 RIP Saved register - Callee
r30 s7 FLAGS Saved register - Callee
r31 s8 xEmu Saved register The Emu struct Callee
******************************************************************************************/
#ifndef ASM_MAPPING
// x86 Register mapping
#define xRAX 12
#define xRCX 7
#define xRDX 6
#define xRBX 10
#define xRSP 11
#define xRBP 13
#define xRSI 5
#define xRDI 4
#define xR8 8
#define xR9 9
#define xR10 23
#define xR11 24
#define xR12 25
#define xR13 26
#define xR14 27
#define xR15 28
#define xFlags 30
#define xRIP 29
#define xSavedSP 22
// convert a x86 register to native according to the register mapping
#define TO_NAT(A) (((uint8_t[]) { 12, 7, 6, 10, 11, 13, 5, 4, 8, 9, 23, 24, 25, 26, 27, 28 })[(A)])
// scratch registers
#define x1 14
#define x2 15
#define x3 16
#define x4 17
#define x5 18
#define x6 19
#define x7 20
#define x87pc 21
// emu is $r31
#define xEmu 31
// LA64 RA
#define xRA 1
#define ra xRA
// LA64 SP
#define xSP 3
// LA64 args
#define A0 4
#define A1 5
#define A2 6
#define A3 7
#define A4 8
#define A5 9
#define A6 10
#define A7 11
// xZR regs
#define xZR 0
#define wZR xZR
#define r0 xZR
#define fcc0 0
#define fcc1 1
#define fcc2 2
#define fcc3 3
#define fcc4 4
#define fcc5 5
#define fcc6 6
#define fcc7 7
#define cAF 0x0
#define cUN 0x8
#define cEQ 0x4
#define cUEQ 0xC
#define cLT 0x2
#define cULT 0xA
#define cLE 0x6
#define cULE 0xE
#define cNE 0x10
#define cOR 0x14
#define cUNE 0x18
#define sAF 0x1
#define sUN 0x9
#define sEQ 0x5
#define sUEQ 0xD
#define sLT 0x3
#define sULT 0xB
#define sLE 0x7
#define sULE 0xF
#define sNE 0x11
#define sOR 0x15
#define sUNE 0x19
#define FCSR0 0
#define FCSR1 1
#define FCSR2 2
#define FCSR3 3
#define FR_V 28
#define FR_Z 27
#define FR_O 26
#define FR_U 25
#define FR_I 24
#else
// x86 Register mapping
#define RAX $r12
#define RCX $r7
#define RDX $r6
#define RBX $r10
#define RSP $r11
#define RBP $r13
#define RSI $r5
#define RDI $r4
#define R8 $r8
#define R9 $r9
#define R10 $r23
#define R11 $r24
#define R12 $r25
#define R13 $r26
#define R14 $r27
#define R15 $r28
#define Flags $r30
#define RIP $r29
#define Emu $r31
#define SavedSP $r22
#ifdef LA64_ABI_1
.macro ret
jr $ra
.endm
#endif // LA64_ABI_1
#endif // ASM_MAPPING
#endif //__LA64_MAPPING_H__
|