Skip to content

Commit e7b6662

Browse files
committed
support crc32 with 8-bit and 16-bit inputs, and add crc64 support
1 parent 7b50189 commit e7b6662

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

Diff for: src/intrinsics/llvm_x86.rs

+13-2
Original file line numberDiff line numberDiff line change
@@ -832,16 +832,27 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
832832
}
833833
}
834834

835-
"llvm.x86.sse42.crc32.32.32" => {
835+
"llvm.x86.sse42.crc32.32.8"
836+
| "llvm.x86.sse42.crc32.32.16"
837+
| "llvm.x86.sse42.crc32.32.32"
838+
| "llvm.x86.sse42.crc32.64.64" => {
836839
// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#ig_expand=1419&text=_mm_crc32_u32
837840
intrinsic_args!(fx, args => (crc, v); intrinsic);
838841

839842
let crc = crc.load_scalar(fx);
840843
let v = v.load_scalar(fx);
841844

845+
let asm = match intrinsic {
846+
"llvm.x86.sse42.crc32.32.8" => "crc32 eax, dl",
847+
"llvm.x86.sse42.crc32.32.16" => "crc32 eax, dx",
848+
"llvm.x86.sse42.crc32.32.32" => "crc32 eax, edx",
849+
"llvm.x86.sse42.crc32.64.64" => "crc32 rax, rdx",
850+
_ => unreachable!(),
851+
};
852+
842853
codegen_inline_asm_inner(
843854
fx,
844-
&[InlineAsmTemplatePiece::String("crc32 eax, edx".to_string())],
855+
&[InlineAsmTemplatePiece::String(asm.to_string())],
845856
&[
846857
CInlineAsmOperand::InOut {
847858
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::ax)),

0 commit comments

Comments
 (0)