@@ -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