| 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
|
| + *
|
|
|
|
|