1 ; XzCrc64Opt.asm -- CRC64 calculation : optimized version
2 ; 2011-06-28 : Igor Pavlov : Public domain
18 CRC_XOR
macro dest:req
, src:req
, t:req
19 xor dest
, QWORD PTR [r5
+ src
* 8 + 0800h * t
]
23 movzx x6
, BYTE PTR [rD
]
32 MY_PROLOG
macro crc_end:req
59 MY_EPILOG
macro crc_end:req
75 MY_PROC XzCrc64UpdateT4
, 4
103 crc_val
equ (REG_SIZE
* 5)
104 crc_table
equ (8 + crc_val
)
105 table_VAR
equ [r4
+ crc_table
]
106 num_VAR
equ table_VAR
111 CRC
macro op0:req
, op1:req
, dest0:req
, dest1:req
, src:req
, t:req
112 op0 dest0
, DWORD PTR [r5
+ src
* 8 + 0800h * t
]
113 op1 dest1
, DWORD PTR [r5
+ src
* 8 + 0800h * t
+ 4]
116 CRC_XOR
macro dest0:req
, dest1:req
, src:req
, t:req
117 CRC
xor, xor, dest0
, dest1
, src
, t
122 movzx x6
, BYTE PTR [rD
]
128 CRC_XOR r0
, r2
, r6
, 0
132 MY_PROLOG
macro crc_end:req
137 mov x0
, [r4
+ crc_val
]
138 mov x2
, [r4
+ crc_val
+ 4]
161 MY_EPILOG
macro crc_end:req
177 MY_PROC XzCrc64UpdateT4
, 5
185 CRC
xor, mov, r3
, r2
, r6
, 3
188 CRC_XOR r3
, r2
, r6
, 2
192 CRC_XOR r3
, r2
, r6
, 1
193 CRC_XOR r3
, r2
, r0
, 0