in source/intel/asm/crc32c_sse42_asm.c [54:116]
static inline uint32_t s_crc32c_sse42_clmul_256(const uint8_t *input, uint32_t crc) {
__asm__ __volatile__(
"enter_256_%=:"
"xor %%r11, %%r11 # zero all 64 bits in r11, will track crc1 \n"
"xor %%r10, %%r10 # zero all 64 bits in r10, will track crc2 \n"
"crc32q 0(%[in]), %%rcx # crc0 \n"
"crc32q 88(%[in]), %%r11 # crc1 \n"
"crc32q 176(%[in]), %%r10 # crc2 \n"
"crc32q 8(%[in]), %%rcx # crc0 \n"
"crc32q 96(%[in]), %%r11 # crc1 \n"
"crc32q 184(%[in]), %%r10 # crc2 \n"
"crc32q 16(%[in]), %%rcx # crc0 \n"
"crc32q 104(%[in]), %%r11 # crc1 \n"
"crc32q 192(%[in]), %%r10 # crc2 \n"
"crc32q 24(%[in]), %%rcx # crc0 \n"
"crc32q 112(%[in]), %%r11 # crc1 \n"
"crc32q 200(%[in]), %%r10 # crc2 \n"
"crc32q 32(%[in]), %%rcx # crc0 \n"
"crc32q 120(%[in]), %%r11 # crc1 \n"
"crc32q 208(%[in]), %%r10 # crc2 \n"
"crc32q 40(%[in]), %%rcx # crc0 \n"
"crc32q 128(%[in]), %%r11 # crc1 \n"
"crc32q 216(%[in]), %%r10 # crc2 \n"
"crc32q 48(%[in]), %%rcx # crc0 \n"
"crc32q 136(%[in]), %%r11 # crc1 \n"
"crc32q 224(%[in]), %%r10 # crc2 \n"
"crc32q 56(%[in]), %%rcx # crc0 \n"
"crc32q 144(%[in]), %%r11 # crc1 \n"
"crc32q 232(%[in]), %%r10 # crc2 \n"
"crc32q 64(%[in]), %%rcx # crc0 \n"
"crc32q 152(%[in]), %%r11 # crc1 \n"
"crc32q 240(%[in]), %%r10 # crc2 \n"
"crc32q 72(%[in]), %%rcx # crc0 \n"
"crc32q 160(%[in]), %%r11 # crc1 \n"
"crc32q 248(%[in]), %%r10 # crc2 \n"
"crc32q 80(%[in]), %%rcx # crc0 \n"
"crc32q 168(%[in]), %%r11 # crc2 \n"
FOLD_K1K2(256, $0x1b3d8f29, $0x39d3b296) /* Magic Constants used to fold crc stripes into ecx */
/* output registers
[crc] is an input and and output so it is marked read/write (i.e. "+c")*/
: "+c"(crc)
/* input registers */
: [ crc ] "c"(crc), [ in ] "d"(input)
/* additional clobbered registers */
: "%r8", "%r9", "%r11", "%r10", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "cc");
return crc;
}