summaryrefslogtreecommitdiffstats
path: root/Asm/x86/7zAsm.asm
diff options
context:
space:
mode:
Diffstat (limited to 'Asm/x86/7zAsm.asm')
-rwxr-xr-xAsm/x86/7zAsm.asm93
1 files changed, 93 insertions, 0 deletions
diff --git a/Asm/x86/7zAsm.asm b/Asm/x86/7zAsm.asm
new file mode 100755
index 0000000..5a5f271
--- /dev/null
+++ b/Asm/x86/7zAsm.asm
@@ -0,0 +1,93 @@
+; 7zAsm.asm -- ASM macros
+; 2009-12-12 : 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 equ numParams
+ ifdef x64
+ proc_name equ name
+ name PROC
+ else
+ proc_fastcall_name equ @CatStr(@,name,@, %numParams * 4)
+ public proc_fastcall_name
+ proc_fastcall_name:
+ endif
+endm
+
+MY_ENDP macro
+ ifdef x64
+ ret
+ proc_name ENDP
+ else
+ ret (proc_numParams - 2) * 4
+ endif
+endm
+
+ifdef x64
+ REG_SIZE equ 8
+else
+ REG_SIZE equ 4
+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_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
+ r0 equ RAX
+ r1 equ RCX
+ r2 equ RDX
+ r3 equ RBX
+ r4 equ RSP
+ r5 equ RBP
+ r6 equ RSI
+ r7 equ RDI
+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