Changeset View
Changeset View
Standalone View
Standalone View
cipher/crc-intel-pclmul.c
Context not available. | |||||
[inbuf_2] "m" (inbuf[2 * 16]), | [inbuf_2] "m" (inbuf[2 * 16]), | ||||
[inbuf_3] "m" (inbuf[3 * 16]), | [inbuf_3] "m" (inbuf[3 * 16]), | ||||
[crc] "m" (*pcrc) | [crc] "m" (*pcrc) | ||||
: ); | ); | ||||
inbuf += 4 * 16; | inbuf += 4 * 16; | ||||
inlen -= 4 * 16; | inlen -= 4 * 16; | ||||
Context not available. | |||||
asm volatile ("movdqa %[k1k2], %%xmm4\n\t" | asm volatile ("movdqa %[k1k2], %%xmm4\n\t" | ||||
: | : | ||||
: [k1k2] "m" (consts->k[1 - 1]) | : [k1k2] "m" (consts->k[1 - 1]) | ||||
: ); | ); | ||||
/* Fold by 4. */ | /* Fold by 4. */ | ||||
while (inlen >= 4 * 16) | while (inlen >= 4 * 16) | ||||
Context not available. | |||||
[inbuf_1] "m" (inbuf[1 * 16]), | [inbuf_1] "m" (inbuf[1 * 16]), | ||||
[inbuf_2] "m" (inbuf[2 * 16]), | [inbuf_2] "m" (inbuf[2 * 16]), | ||||
[inbuf_3] "m" (inbuf[3 * 16]) | [inbuf_3] "m" (inbuf[3 * 16]) | ||||
: ); | ); | ||||
inbuf += 4 * 16; | inbuf += 4 * 16; | ||||
inlen -= 4 * 16; | inlen -= 4 * 16; | ||||
Context not available. | |||||
: | : | ||||
: [k3k4] "m" (consts->k[3 - 1]), | : [k3k4] "m" (consts->k[3 - 1]), | ||||
[my_p] "m" (consts->my_p[0]) | [my_p] "m" (consts->my_p[0]) | ||||
: ); | ); | ||||
/* Fold 4 to 1. */ | /* Fold 4 to 1. */ | ||||
Context not available. | |||||
"pxor %%xmm4, %%xmm0\n\t" | "pxor %%xmm4, %%xmm0\n\t" | ||||
: | : | ||||
: | : | ||||
: ); | ); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
Context not available. | |||||
[crc] "m" (*pcrc), | [crc] "m" (*pcrc), | ||||
[k3k4] "m" (consts->k[3 - 1]), | [k3k4] "m" (consts->k[3 - 1]), | ||||
[my_p] "m" (consts->my_p[0]) | [my_p] "m" (consts->my_p[0]) | ||||
: ); | ); | ||||
inbuf += 16; | inbuf += 16; | ||||
inlen -= 16; | inlen -= 16; | ||||
Context not available. | |||||
"pxor %%xmm1, %%xmm0\n\t" | "pxor %%xmm1, %%xmm0\n\t" | ||||
: | : | ||||
: [inbuf] "m" (*inbuf) | : [inbuf] "m" (*inbuf) | ||||
: ); | ); | ||||
inbuf += 16; | inbuf += 16; | ||||
inlen -= 16; | inlen -= 16; | ||||
Context not available. | |||||
[mask] "m" (crc32_partial_fold_input_mask[inlen]), | [mask] "m" (crc32_partial_fold_input_mask[inlen]), | ||||
[shl_shuf] "m" (crc32_refl_shuf_shift[inlen]), | [shl_shuf] "m" (crc32_refl_shuf_shift[inlen]), | ||||
[shr_shuf] "m" (crc32_refl_shuf_shift[inlen + 16]) | [shr_shuf] "m" (crc32_refl_shuf_shift[inlen + 16]) | ||||
: ); | ); | ||||
inbuf += inlen; | inbuf += inlen; | ||||
inlen -= inlen; | inlen -= inlen; | ||||
Context not available. | |||||
"pextrd $2, %%xmm0, %[out]\n\t" | "pextrd $2, %%xmm0, %[out]\n\t" | ||||
: [out] "=m" (*pcrc) | : [out] "=m" (*pcrc) | ||||
: [k5] "m" (consts->k[5 - 1]) | : [k5] "m" (consts->k[5 - 1]) | ||||
: ); | ); | ||||
} | } | ||||
static inline void | static inline void | ||||
Context not available. | |||||
asm volatile ("movdqa %[my_p], %%xmm5\n\t" | asm volatile ("movdqa %[my_p], %%xmm5\n\t" | ||||
: | : | ||||
: [my_p] "m" (consts->my_p[0]) | : [my_p] "m" (consts->my_p[0]) | ||||
: ); | ); | ||||
if (inlen == 1) | if (inlen == 1) | ||||
{ | { | ||||
Context not available. | |||||
: [out] "=m" (*pcrc) | : [out] "=m" (*pcrc) | ||||
: [in] "rm" (data), | : [in] "rm" (data), | ||||
[crc] "rm" (crc) | [crc] "rm" (crc) | ||||
: ); | ); | ||||
} | } | ||||
else if (inlen == 4) | else if (inlen == 4) | ||||
{ | { | ||||
Context not available. | |||||
: [in] "m" (*inbuf), | : [in] "m" (*inbuf), | ||||
[crc] "m" (*pcrc), | [crc] "m" (*pcrc), | ||||
[my_p] "m" (consts->my_p[0]) | [my_p] "m" (consts->my_p[0]) | ||||
: ); | ); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
Context not available. | |||||
[crc] "m" (*pcrc), | [crc] "m" (*pcrc), | ||||
[my_p] "m" (consts->my_p[0]), | [my_p] "m" (consts->my_p[0]), | ||||
[k3k4] "m" (consts->k[3 - 1]) | [k3k4] "m" (consts->k[3 - 1]) | ||||
: ); | ); | ||||
if (inlen >= 8) | if (inlen >= 8) | ||||
{ | { | ||||
asm volatile ("movq %[inbuf], %%xmm0\n\t" | asm volatile ("movq %[inbuf], %%xmm0\n\t" | ||||
: | : | ||||
: [inbuf] "m" (*inbuf) | : [inbuf] "m" (*inbuf) | ||||
: ); | ); | ||||
if (inlen > 8) | if (inlen > 8) | ||||
{ | { | ||||
asm volatile (/*"pinsrq $1, %[inbuf_tail], %%xmm0\n\t"*/ | asm volatile (/*"pinsrq $1, %[inbuf_tail], %%xmm0\n\t"*/ | ||||
Context not available. | |||||
: [inbuf_tail] "m" (inbuf[inlen - 8]), | : [inbuf_tail] "m" (inbuf[inlen - 8]), | ||||
[merge_shuf] "m" | [merge_shuf] "m" | ||||
(*crc32_merge9to15_shuf[inlen - 9]) | (*crc32_merge9to15_shuf[inlen - 9]) | ||||
: ); | ); | ||||
} | } | ||||
} | } | ||||
else | else | ||||
Context not available. | |||||
[inbuf_tail] "m" (inbuf[inlen - 4]), | [inbuf_tail] "m" (inbuf[inlen - 4]), | ||||
[merge_shuf] "m" | [merge_shuf] "m" | ||||
(*crc32_merge5to7_shuf[inlen - 5]) | (*crc32_merge5to7_shuf[inlen - 5]) | ||||
: ); | ); | ||||
} | } | ||||
/* Final fold. */ | /* Final fold. */ | ||||
Context not available. | |||||
"pextrd $2, %%xmm0, %[out]\n\t" | "pextrd $2, %%xmm0, %[out]\n\t" | ||||
: [out] "=m" (*pcrc) | : [out] "=m" (*pcrc) | ||||
: [k5] "m" (consts->k[5 - 1]) | : [k5] "m" (consts->k[5 - 1]) | ||||
: ); | ); | ||||
} | } | ||||
} | } | ||||
Context not available. | |||||
asm volatile ("movdqa %[bswap], %%xmm7\n\t" | asm volatile ("movdqa %[bswap], %%xmm7\n\t" | ||||
: | : | ||||
: [bswap] "m" (*crc32_bswap_shuf) | : [bswap] "m" (*crc32_bswap_shuf) | ||||
: ); | ); | ||||
if (inlen >= 8 * 16) | if (inlen >= 8 * 16) | ||||
{ | { | ||||
Context not available. | |||||
[inbuf_2] "m" (inbuf[2 * 16]), | [inbuf_2] "m" (inbuf[2 * 16]), | ||||
[inbuf_3] "m" (inbuf[3 * 16]), | [inbuf_3] "m" (inbuf[3 * 16]), | ||||
[crc] "m" (*pcrc) | [crc] "m" (*pcrc) | ||||
: ); | ); | ||||
inbuf += 4 * 16; | inbuf += 4 * 16; | ||||
inlen -= 4 * 16; | inlen -= 4 * 16; | ||||
Context not available. | |||||
asm volatile ("movdqa %[k1k2], %%xmm4\n\t" | asm volatile ("movdqa %[k1k2], %%xmm4\n\t" | ||||
: | : | ||||
: [k1k2] "m" (consts->k[1 - 1]) | : [k1k2] "m" (consts->k[1 - 1]) | ||||
: ); | ); | ||||
/* Fold by 4. */ | /* Fold by 4. */ | ||||
while (inlen >= 4 * 16) | while (inlen >= 4 * 16) | ||||
Context not available. | |||||
[inbuf_1] "m" (inbuf[1 * 16]), | [inbuf_1] "m" (inbuf[1 * 16]), | ||||
[inbuf_2] "m" (inbuf[2 * 16]), | [inbuf_2] "m" (inbuf[2 * 16]), | ||||
[inbuf_3] "m" (inbuf[3 * 16]) | [inbuf_3] "m" (inbuf[3 * 16]) | ||||
: ); | ); | ||||
inbuf += 4 * 16; | inbuf += 4 * 16; | ||||
inlen -= 4 * 16; | inlen -= 4 * 16; | ||||
Context not available. | |||||
: | : | ||||
: [k3k4] "m" (consts->k[3 - 1]), | : [k3k4] "m" (consts->k[3 - 1]), | ||||
[my_p] "m" (consts->my_p[0]) | [my_p] "m" (consts->my_p[0]) | ||||
: ); | ); | ||||
/* Fold 4 to 1. */ | /* Fold 4 to 1. */ | ||||
Context not available. | |||||
"pxor %%xmm4, %%xmm0\n\t" | "pxor %%xmm4, %%xmm0\n\t" | ||||
: | : | ||||
: | : | ||||
: ); | ); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
Context not available. | |||||
[crc] "m" (*pcrc), | [crc] "m" (*pcrc), | ||||
[k3k4] "m" (consts->k[3 - 1]), | [k3k4] "m" (consts->k[3 - 1]), | ||||
[my_p] "m" (consts->my_p[0]) | [my_p] "m" (consts->my_p[0]) | ||||
: ); | ); | ||||
inbuf += 16; | inbuf += 16; | ||||
inlen -= 16; | inlen -= 16; | ||||
Context not available. | |||||
"pxor %%xmm1, %%xmm0\n\t" | "pxor %%xmm1, %%xmm0\n\t" | ||||
: | : | ||||
: [inbuf] "m" (*inbuf) | : [inbuf] "m" (*inbuf) | ||||
: ); | ); | ||||
inbuf += 16; | inbuf += 16; | ||||
inlen -= 16; | inlen -= 16; | ||||
Context not available. | |||||
[mask] "m" (crc32_partial_fold_input_mask[inlen]), | [mask] "m" (crc32_partial_fold_input_mask[inlen]), | ||||
[shl_shuf] "m" (crc32_refl_shuf_shift[32 - inlen]), | [shl_shuf] "m" (crc32_refl_shuf_shift[32 - inlen]), | ||||
[shr_shuf] "m" (crc32_shuf_shift[inlen + 16]) | [shr_shuf] "m" (crc32_shuf_shift[inlen + 16]) | ||||
: ); | ); | ||||
inbuf += inlen; | inbuf += inlen; | ||||
inlen -= inlen; | inlen -= inlen; | ||||
Context not available. | |||||
asm volatile ("movdqa %[my_p], %%xmm5\n\t" | asm volatile ("movdqa %[my_p], %%xmm5\n\t" | ||||
: | : | ||||
: [my_p] "m" (consts->my_p[0]) | : [my_p] "m" (consts->my_p[0]) | ||||
: ); | ); | ||||
if (inlen == 1) | if (inlen == 1) | ||||
{ | { | ||||
Context not available. | |||||
[crc] "m" (*pcrc), | [crc] "m" (*pcrc), | ||||
[my_p] "m" (consts->my_p[0]), | [my_p] "m" (consts->my_p[0]), | ||||
[k3k4] "m" (consts->k[3 - 1]) | [k3k4] "m" (consts->k[3 - 1]) | ||||
: ); | ); | ||||
if (inlen >= 8) | if (inlen >= 8) | ||||
{ | { | ||||
asm volatile ("movq %[inbuf], %%xmm0\n\t" | asm volatile ("movq %[inbuf], %%xmm0\n\t" | ||||
: | : | ||||
: [inbuf] "m" (*inbuf) | : [inbuf] "m" (*inbuf) | ||||
: ); | ); | ||||
if (inlen > 8) | if (inlen > 8) | ||||
{ | { | ||||
asm volatile (/*"pinsrq $1, %[inbuf_tail], %%xmm0\n\t"*/ | asm volatile (/*"pinsrq $1, %[inbuf_tail], %%xmm0\n\t"*/ | ||||
Context not available. | |||||
: [inbuf_tail] "m" (inbuf[inlen - 8]), | : [inbuf_tail] "m" (inbuf[inlen - 8]), | ||||
[merge_shuf] "m" | [merge_shuf] "m" | ||||
(*crc32_merge9to15_shuf[inlen - 9]) | (*crc32_merge9to15_shuf[inlen - 9]) | ||||
: ); | ); | ||||
} | } | ||||
} | } | ||||
else | else | ||||
Context not available. | |||||
[inbuf_tail] "m" (inbuf[inlen - 4]), | [inbuf_tail] "m" (inbuf[inlen - 4]), | ||||
[merge_shuf] "m" | [merge_shuf] "m" | ||||
(*crc32_merge5to7_shuf[inlen - 5]) | (*crc32_merge5to7_shuf[inlen - 5]) | ||||
: ); | ); | ||||
} | } | ||||
/* Final fold. */ | /* Final fold. */ | ||||
Context not available. |