git subrepo pull (merge) --force deps/libchdr
[pcsx_rearmed.git] / deps / libchdr / deps / lzma-24.05 / Asm / x86 / 7zAsm.asm
CommitLineData
f535537f 1; 7zAsm.asm -- ASM macros
2; 2023-12-08 : Igor Pavlov : Public domain
3
4
5; UASM can require these changes
6; OPTION FRAMEPRESERVEFLAGS:ON
7; OPTION PROLOGUE:NONE
8; OPTION EPILOGUE:NONE
9
10ifdef @wordsize
11; @wordsize is defined only in JWASM and ASMC and is not defined in MASM
12; @wordsize eq 8 for 64-bit x64
13; @wordsize eq 2 for 32-bit x86
14if @wordsize eq 8
15 x64 equ 1
16endif
17else
18ifdef RAX
19 x64 equ 1
20endif
21endif
22
23
24ifdef x64
25 IS_X64 equ 1
26else
27 IS_X64 equ 0
28endif
29
30ifdef ABI_LINUX
31 IS_LINUX equ 1
32else
33 IS_LINUX equ 0
34endif
35
36ifndef x64
37; Use ABI_CDECL for x86 (32-bit) only
38; if ABI_CDECL is not defined, we use fastcall abi
39ifdef ABI_CDECL
40 IS_CDECL equ 1
41else
42 IS_CDECL equ 0
43endif
44endif
45
46OPTION PROLOGUE:NONE
47OPTION EPILOGUE:NONE
48
49MY_ASM_START macro
50 ifdef x64
51 .code
52 else
53 .386
54 .model flat
55 _TEXT$00 SEGMENT PARA PUBLIC 'CODE'
56 endif
57endm
58
59MY_PROC macro name:req, numParams:req
60 align 16
61 proc_numParams = numParams
62 if (IS_X64 gt 0)
63 proc_name equ name
64 elseif (IS_LINUX gt 0)
65 proc_name equ name
66 elseif (IS_CDECL gt 0)
67 proc_name equ @CatStr(_,name)
68 else
69 proc_name equ @CatStr(@,name,@, %numParams * 4)
70 endif
71 proc_name PROC
72endm
73
74MY_ENDP macro
75 if (IS_X64 gt 0)
76 ret
77 elseif (IS_CDECL gt 0)
78 ret
79 elseif (proc_numParams LT 3)
80 ret
81 else
82 ret (proc_numParams - 2) * 4
83 endif
84 proc_name ENDP
85endm
86
87
88ifdef x64
89 REG_SIZE equ 8
90 REG_LOGAR_SIZE equ 3
91else
92 REG_SIZE equ 4
93 REG_LOGAR_SIZE equ 2
94endif
95
96 x0 equ EAX
97 x1 equ ECX
98 x2 equ EDX
99 x3 equ EBX
100 x4 equ ESP
101 x5 equ EBP
102 x6 equ ESI
103 x7 equ EDI
104
105 x0_W equ AX
106 x1_W equ CX
107 x2_W equ DX
108 x3_W equ BX
109
110 x5_W equ BP
111 x6_W equ SI
112 x7_W equ DI
113
114 x0_L equ AL
115 x1_L equ CL
116 x2_L equ DL
117 x3_L equ BL
118
119 x0_H equ AH
120 x1_H equ CH
121 x2_H equ DH
122 x3_H equ BH
123
124; r0_L equ AL
125; r1_L equ CL
126; r2_L equ DL
127; r3_L equ BL
128
129; r0_H equ AH
130; r1_H equ CH
131; r2_H equ DH
132; r3_H equ BH
133
134
135ifdef x64
136 x5_L equ BPL
137 x6_L equ SIL
138 x7_L equ DIL
139 x8_L equ r8b
140 x9_L equ r9b
141 x10_L equ r10b
142 x11_L equ r11b
143 x12_L equ r12b
144 x13_L equ r13b
145 x14_L equ r14b
146 x15_L equ r15b
147
148 r0 equ RAX
149 r1 equ RCX
150 r2 equ RDX
151 r3 equ RBX
152 r4 equ RSP
153 r5 equ RBP
154 r6 equ RSI
155 r7 equ RDI
156 x8 equ r8d
157 x9 equ r9d
158 x10 equ r10d
159 x11 equ r11d
160 x12 equ r12d
161 x13 equ r13d
162 x14 equ r14d
163 x15 equ r15d
164else
165 r0 equ x0
166 r1 equ x1
167 r2 equ x2
168 r3 equ x3
169 r4 equ x4
170 r5 equ x5
171 r6 equ x6
172 r7 equ x7
173endif
174
175 x0_R equ r0
176 x1_R equ r1
177 x2_R equ r2
178 x3_R equ r3
179 x4_R equ r4
180 x5_R equ r5
181 x6_R equ r6
182 x7_R equ r7
183 x8_R equ r8
184 x9_R equ r9
185 x10_R equ r10
186 x11_R equ r11
187 x12_R equ r12
188 x13_R equ r13
189 x14_R equ r14
190 x15_R equ r15
191
192ifdef x64
193ifdef ABI_LINUX
194
195MY_PUSH_2_REGS macro
196 push r3
197 push r5
198endm
199
200MY_POP_2_REGS macro
201 pop r5
202 pop r3
203endm
204
205endif
206endif
207
208
209MY_PUSH_4_REGS macro
210 push r3
211 push r5
212 push r6
213 push r7
214endm
215
216MY_POP_4_REGS macro
217 pop r7
218 pop r6
219 pop r5
220 pop r3
221endm
222
223
224; for fastcall and for WIN-x64
225REG_PARAM_0_x equ x1
226REG_PARAM_0 equ r1
227REG_PARAM_1_x equ x2
228REG_PARAM_1 equ r2
229
230ifndef x64
231; for x86-fastcall
232
233REG_ABI_PARAM_0_x equ REG_PARAM_0_x
234REG_ABI_PARAM_0 equ REG_PARAM_0
235REG_ABI_PARAM_1_x equ REG_PARAM_1_x
236REG_ABI_PARAM_1 equ REG_PARAM_1
237
238MY_PUSH_PRESERVED_ABI_REGS_UP_TO_INCLUDING_R11 macro
239 MY_PUSH_4_REGS
240endm
241
242MY_POP_PRESERVED_ABI_REGS_UP_TO_INCLUDING_R11 macro
243 MY_POP_4_REGS
244endm
245
246else
247; x64
248
249if (IS_LINUX eq 0)
250
251; for WIN-x64:
252REG_PARAM_2_x equ x8
253REG_PARAM_2 equ r8
254REG_PARAM_3 equ r9
255
256REG_ABI_PARAM_0_x equ REG_PARAM_0_x
257REG_ABI_PARAM_0 equ REG_PARAM_0
258REG_ABI_PARAM_1_x equ REG_PARAM_1_x
259REG_ABI_PARAM_1 equ REG_PARAM_1
260REG_ABI_PARAM_2_x equ REG_PARAM_2_x
261REG_ABI_PARAM_2 equ REG_PARAM_2
262REG_ABI_PARAM_3 equ REG_PARAM_3
263
264else
265; for LINUX-x64:
266REG_LINUX_PARAM_0_x equ x7
267REG_LINUX_PARAM_0 equ r7
268REG_LINUX_PARAM_1_x equ x6
269REG_LINUX_PARAM_1 equ r6
270REG_LINUX_PARAM_2 equ r2
271REG_LINUX_PARAM_3 equ r1
272REG_LINUX_PARAM_4_x equ x8
273REG_LINUX_PARAM_4 equ r8
274REG_LINUX_PARAM_5 equ r9
275
276REG_ABI_PARAM_0_x equ REG_LINUX_PARAM_0_x
277REG_ABI_PARAM_0 equ REG_LINUX_PARAM_0
278REG_ABI_PARAM_1_x equ REG_LINUX_PARAM_1_x
279REG_ABI_PARAM_1 equ REG_LINUX_PARAM_1
280REG_ABI_PARAM_2 equ REG_LINUX_PARAM_2
281REG_ABI_PARAM_3 equ REG_LINUX_PARAM_3
282REG_ABI_PARAM_4_x equ REG_LINUX_PARAM_4_x
283REG_ABI_PARAM_4 equ REG_LINUX_PARAM_4
284REG_ABI_PARAM_5 equ REG_LINUX_PARAM_5
285
286MY_ABI_LINUX_TO_WIN_2 macro
287 mov r2, r6
288 mov r1, r7
289endm
290
291MY_ABI_LINUX_TO_WIN_3 macro
292 mov r8, r2
293 mov r2, r6
294 mov r1, r7
295endm
296
297MY_ABI_LINUX_TO_WIN_4 macro
298 mov r9, r1
299 mov r8, r2
300 mov r2, r6
301 mov r1, r7
302endm
303
304endif ; IS_LINUX
305
306
307MY_PUSH_PRESERVED_ABI_REGS_UP_TO_INCLUDING_R11 macro
308 if (IS_LINUX gt 0)
309 MY_PUSH_2_REGS
310 else
311 MY_PUSH_4_REGS
312 endif
313endm
314
315MY_POP_PRESERVED_ABI_REGS_UP_TO_INCLUDING_R11 macro
316 if (IS_LINUX gt 0)
317 MY_POP_2_REGS
318 else
319 MY_POP_4_REGS
320 endif
321endm
322
323
324MY_PUSH_PRESERVED_ABI_REGS macro
325 MY_PUSH_PRESERVED_ABI_REGS_UP_TO_INCLUDING_R11
326 push r12
327 push r13
328 push r14
329 push r15
330endm
331
332
333MY_POP_PRESERVED_ABI_REGS macro
334 pop r15
335 pop r14
336 pop r13
337 pop r12
338 MY_POP_PRESERVED_ABI_REGS_UP_TO_INCLUDING_R11
339endm
340
341endif ; x64