Index: third_party/lzma_sdk/Asm/x86/7zCrcOpt.asm |
=================================================================== |
--- third_party/lzma_sdk/Asm/x86/7zCrcOpt.asm (revision 0) |
+++ third_party/lzma_sdk/Asm/x86/7zCrcOpt.asm (revision 0) |
@@ -0,0 +1,147 @@ |
+; 7zCrcOpt.asm -- CRC32 calculation : optimized version |
+; 2009-12-12 : Igor Pavlov : Public domain |
+ |
+include 7zAsm.asm |
+ |
+MY_ASM_START |
+ |
+rD equ r2 |
+rN equ r7 |
+ |
+ifdef x64 |
+ num_VAR equ r8 |
+ table_VAR equ r9 |
+else |
+ data_size equ (REG_SIZE * 5) |
+ crc_table equ (REG_SIZE + data_size) |
+ num_VAR equ [r4 + data_size] |
+ table_VAR equ [r4 + crc_table] |
+endif |
+ |
+SRCDAT equ rN + rD + 4 * |
+ |
+CRC macro op:req, dest:req, src:req, t:req |
+ op dest, DWORD PTR [r5 + src * 4 + 0400h * t] |
+endm |
+ |
+CRC_XOR macro dest:req, src:req, t:req |
+ CRC xor, dest, src, t |
+endm |
+ |
+CRC_MOV macro dest:req, src:req, t:req |
+ CRC mov, dest, src, t |
+endm |
+ |
+CRC1b macro |
+ movzx x6, BYTE PTR [rD] |
+ inc rD |
+ movzx x3, x0_L |
+ xor x6, x3 |
+ shr x0, 8 |
+ CRC xor, x0, r6, 0 |
+ dec rN |
+endm |
+ |
+MY_PROLOG macro crc_end:req |
+ MY_PUSH_4_REGS |
+ |
+ mov x0, x1 |
+ mov rN, num_VAR |
+ mov r5, table_VAR |
+ test rN, rN |
+ jz crc_end |
+ @@: |
+ test rD, 7 |
+ jz @F |
+ CRC1b |
+ jnz @B |
+ @@: |
+ cmp rN, 16 |
+ jb crc_end |
+ add rN, rD |
+ mov num_VAR, rN |
+ sub rN, 8 |
+ and rN, NOT 7 |
+ sub rD, rN |
+ xor x0, [SRCDAT 0] |
+endm |
+ |
+MY_EPILOG macro crc_end:req |
+ xor x0, [SRCDAT 0] |
+ mov rD, rN |
+ mov rN, num_VAR |
+ sub rN, rD |
+ crc_end: |
+ test rN, rN |
+ jz @F |
+ CRC1b |
+ jmp crc_end |
+ @@: |
+ MY_POP_4_REGS |
+endm |
+ |
+MY_PROC CrcUpdateT8, 4 |
+ MY_PROLOG crc_end_8 |
+ mov x1, [SRCDAT 1] |
+ align 16 |
+ main_loop_8: |
+ mov x6, [SRCDAT 2] |
+ movzx x3, x1_L |
+ CRC_XOR x6, r3, 3 |
+ movzx x3, x1_H |
+ CRC_XOR x6, r3, 2 |
+ shr x1, 16 |
+ movzx x3, x1_L |
+ movzx x1, x1_H |
+ CRC_XOR x6, r3, 1 |
+ movzx x3, x0_L |
+ CRC_XOR x6, r1, 0 |
+ |
+ mov x1, [SRCDAT 3] |
+ CRC_XOR x6, r3, 7 |
+ movzx x3, x0_H |
+ shr x0, 16 |
+ CRC_XOR x6, r3, 6 |
+ movzx x3, x0_L |
+ CRC_XOR x6, r3, 5 |
+ movzx x3, x0_H |
+ CRC_MOV x0, r3, 4 |
+ xor x0, x6 |
+ add rD, 8 |
+ jnz main_loop_8 |
+ |
+ MY_EPILOG crc_end_8 |
+MY_ENDP |
+ |
+MY_PROC CrcUpdateT4, 4 |
+ MY_PROLOG crc_end_4 |
+ align 16 |
+ main_loop_4: |
+ movzx x1, x0_L |
+ movzx x3, x0_H |
+ shr x0, 16 |
+ movzx x6, x0_H |
+ and x0, 0FFh |
+ CRC_MOV x1, r1, 3 |
+ xor x1, [SRCDAT 1] |
+ CRC_XOR x1, r3, 2 |
+ CRC_XOR x1, r6, 0 |
+ CRC_XOR x1, r0, 1 |
+ |
+ movzx x0, x1_L |
+ movzx x3, x1_H |
+ shr x1, 16 |
+ movzx x6, x1_H |
+ and x1, 0FFh |
+ CRC_MOV x0, r0, 3 |
+ xor x0, [SRCDAT 2] |
+ CRC_XOR x0, r3, 2 |
+ CRC_XOR x0, r6, 0 |
+ CRC_XOR x0, r1, 1 |
+ add rD, 8 |
+ jnz main_loop_4 |
+ |
+ MY_EPILOG crc_end_4 |
+MY_ENDP |
+ |
+end |
Property changes on: third_party\lzma_sdk\Asm\x86\7zCrcOpt.asm |
___________________________________________________________________ |
Added: svn:executable |
+ * |