Skip to content

Commit 7b50189

Browse files
authored
add the llvm.x86.sse42.crc32.32.32 intrinsic (rust-lang#1488)
* add the `llvm.x86.sse42.crc32.32.32` intrinsic
1 parent 9ee010c commit 7b50189

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

src/intrinsics/llvm_x86.rs

+26
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,32 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
832832
}
833833
}
834834

835+
"llvm.x86.sse42.crc32.32.32" => {
836+
// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#ig_expand=1419&text=_mm_crc32_u32
837+
intrinsic_args!(fx, args => (crc, v); intrinsic);
838+
839+
let crc = crc.load_scalar(fx);
840+
let v = v.load_scalar(fx);
841+
842+
codegen_inline_asm_inner(
843+
fx,
844+
&[InlineAsmTemplatePiece::String("crc32 eax, edx".to_string())],
845+
&[
846+
CInlineAsmOperand::InOut {
847+
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::ax)),
848+
_late: true,
849+
in_value: crc,
850+
out_place: Some(ret),
851+
},
852+
CInlineAsmOperand::In {
853+
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::dx)),
854+
value: v,
855+
},
856+
],
857+
InlineAsmOptions::NOSTACK | InlineAsmOptions::PURE | InlineAsmOptions::NOMEM,
858+
);
859+
}
860+
835861
"llvm.x86.sse42.pcmpestri128" => {
836862
// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestri&ig_expand=939
837863
intrinsic_args!(fx, args => (a, la, b, lb, _imm8); intrinsic);

0 commit comments

Comments
 (0)