xref: /aosp_15_r20/external/lzma/Asm/x86/7zAsm.asm (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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
342