1; 7zAsm.asm -- ASM macros
2; 2018-02-03 : Igor Pavlov : Public domain
3
4MY_ASM_START macro
5  ifdef x64
6    .code
7  else
8    .386
9    .model flat
10    _TEXT$00 SEGMENT PARA PUBLIC 'CODE'
11  endif
12endm
13
14MY_PROC macro name:req, numParams:req
15  align 16
16  proc_numParams = numParams
17  ifdef x64
18    proc_name equ name
19  else
20    proc_name equ @CatStr(@,name,@, %numParams * 4)
21  endif
22  proc_name PROC
23endm
24
25MY_ENDP macro
26  ifdef x64
27    ret
28  else
29    if proc_numParams LT 3
30      ret
31    else
32      ret (proc_numParams - 2) * 4
33    endif
34  endif
35  proc_name ENDP
36endm
37
38ifdef x64
39  REG_SIZE equ 8
40  REG_LOGAR_SIZE equ 3
41else
42  REG_SIZE equ 4
43  REG_LOGAR_SIZE equ 2
44endif
45
46  x0 equ EAX
47  x1 equ ECX
48  x2 equ EDX
49  x3 equ EBX
50  x4 equ ESP
51  x5 equ EBP
52  x6 equ ESI
53  x7 equ EDI
54
55  x0_W equ AX
56  x1_W equ CX
57  x2_W equ DX
58  x3_W equ BX
59
60  x5_W equ BP
61  x6_W equ SI
62  x7_W equ DI
63
64  x0_L equ AL
65  x1_L equ CL
66  x2_L equ DL
67  x3_L equ BL
68
69  x0_H equ AH
70  x1_H equ CH
71  x2_H equ DH
72  x3_H equ BH
73
74ifdef x64
75  x5_L equ BPL
76  x6_L equ SIL
77  x7_L equ DIL
78
79  r0 equ RAX
80  r1 equ RCX
81  r2 equ RDX
82  r3 equ RBX
83  r4 equ RSP
84  r5 equ RBP
85  r6 equ RSI
86  r7 equ RDI
87  x8 equ r8d
88  x9 equ r9d
89  x10 equ r10d
90  x11 equ r11d
91  x12 equ r12d
92  x13 equ r13d
93  x14 equ r14d
94  x15 equ r15d
95else
96  r0 equ x0
97  r1 equ x1
98  r2 equ x2
99  r3 equ x3
100  r4 equ x4
101  r5 equ x5
102  r6 equ x6
103  r7 equ x7
104endif
105
106MY_PUSH_4_REGS macro
107    push    r3
108    push    r5
109    push    r6
110    push    r7
111endm
112
113MY_POP_4_REGS macro
114    pop     r7
115    pop     r6
116    pop     r5
117    pop     r3
118endm
119
120
121ifdef x64
122
123; for WIN64-x64 ABI:
124
125REG_PARAM_0 equ r1
126REG_PARAM_1 equ r2
127REG_PARAM_2 equ r8
128REG_PARAM_3 equ r9
129
130MY_PUSH_PRESERVED_REGS macro
131    MY_PUSH_4_REGS
132    push    r12
133    push    r13
134    push    r14
135    push    r15
136endm
137
138
139MY_POP_PRESERVED_REGS macro
140    pop     r15
141    pop     r14
142    pop     r13
143    pop     r12
144    MY_POP_4_REGS
145endm
146
147endif
148