@@ -832,16 +832,27 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
832
832
}
833
833
}
834
834
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" => {
836
839
// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#ig_expand=1419&text=_mm_crc32_u32
837
840
intrinsic_args ! ( fx, args => ( crc, v) ; intrinsic) ;
838
841
839
842
let crc = crc. load_scalar ( fx) ;
840
843
let v = v. load_scalar ( fx) ;
841
844
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
+
842
853
codegen_inline_asm_inner (
843
854
fx,
844
- & [ InlineAsmTemplatePiece :: String ( "crc32 eax, edx" . to_string ( ) ) ] ,
855
+ & [ InlineAsmTemplatePiece :: String ( asm . to_string ( ) ) ] ,
845
856
& [
846
857
CInlineAsmOperand :: InOut {
847
858
reg : InlineAsmRegOrRegClass :: Reg ( InlineAsmReg :: X86 ( X86InlineAsmReg :: ax) ) ,
0 commit comments