; 7zAsm.asm -- ASM macros ; 2018-02-03 : Igor Pavlov : Public domain MY_ASM_START macro ifdef x64 .code else .386 .model flat _TEXT$00 SEGMENT PARA PUBLIC 'CODE' endif endm MY_PROC macro name:req, numParams:req align 16 proc_numParams = numParams ifdef x64 proc_name equ name else proc_name equ @CatStr(@,name,@, %numParams * 4) endif proc_name PROC endm MY_ENDP macro ifdef x64 ret else if proc_numParams LT 3 ret else ret (proc_numParams - 2) * 4 endif endif proc_name ENDP endm ifdef x64 REG_SIZE equ 8 REG_LOGAR_SIZE equ 3 else REG_SIZE equ 4 REG_LOGAR_SIZE equ 2 endif x0 equ EAX x1 equ ECX x2 equ EDX x3 equ EBX x4 equ ESP x5 equ EBP x6 equ ESI x7 equ EDI x0_W equ AX x1_W equ CX x2_W equ DX x3_W equ BX x5_W equ BP x6_W equ SI x7_W equ DI x0_L equ AL x1_L equ CL x2_L equ DL x3_L equ BL x0_H equ AH x1_H equ CH x2_H equ DH x3_H equ BH ifdef x64 x5_L equ BPL x6_L equ SIL x7_L equ DIL r0 equ RAX r1 equ RCX r2 equ RDX r3 equ RBX r4 equ RSP r5 equ RBP r6 equ RSI r7 equ RDI x8 equ r8d x9 equ r9d x10 equ r10d x11 equ r11d x12 equ r12d x13 equ r13d x14 equ r14d x15 equ r15d else r0 equ x0 r1 equ x1 r2 equ x2 r3 equ x3 r4 equ x4 r5 equ x5 r6 equ x6 r7 equ x7 endif MY_PUSH_4_REGS macro push r3 push r5 push r6 push r7 endm MY_POP_4_REGS macro pop r7 pop r6 pop r5 pop r3 endm ifdef x64 ; for WIN64-x64 ABI: REG_PARAM_0 equ r1 REG_PARAM_1 equ r2 REG_PARAM_2 equ r8 REG_PARAM_3 equ r9 MY_PUSH_PRESERVED_REGS macro MY_PUSH_4_REGS push r12 push r13 push r14 push r15 endm MY_POP_PRESERVED_REGS macro pop r15 pop r14 pop r13 pop r12 MY_POP_4_REGS endm endif