@@ -564,56 +564,71 @@ fn reg_to_gcc(reg: InlineAsmRegOrRegClass) -> ConstraintOrRegister {
564564 _ => unimplemented ! ( ) ,
565565 }
566566 } ,
567+ // They can be retrieved from https://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html
567568 InlineAsmRegOrRegClass :: RegClass ( reg) => match reg {
568- InlineAsmRegClass :: AArch64 ( AArch64InlineAsmRegClass :: preg) => unimplemented ! ( ) ,
569- InlineAsmRegClass :: AArch64 ( AArch64InlineAsmRegClass :: reg) => unimplemented ! ( ) ,
570- InlineAsmRegClass :: AArch64 ( AArch64InlineAsmRegClass :: vreg) => unimplemented ! ( ) ,
571- InlineAsmRegClass :: AArch64 ( AArch64InlineAsmRegClass :: vreg_low16) => unimplemented ! ( ) ,
572- InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
569+ InlineAsmRegClass :: AArch64 ( AArch64InlineAsmRegClass :: reg) => "r" ,
570+ InlineAsmRegClass :: AArch64 ( AArch64InlineAsmRegClass :: vreg) => "w" ,
571+ InlineAsmRegClass :: AArch64 ( AArch64InlineAsmRegClass :: vreg_low16) => "x" ,
572+ InlineAsmRegClass :: AArch64 ( AArch64InlineAsmRegClass :: preg) => {
573+ unreachable ! ( "clobber-only" )
574+ }
575+ InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: reg) => "r" ,
573576 InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: sreg)
574577 | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: dreg_low16)
575- | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: qreg_low8) => unimplemented ! ( ) ,
576- InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: sreg_low16)
578+ | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: qreg_low8)
579+ | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: sreg_low16)
577580 | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: dreg_low8)
578- | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: qreg_low4) => unimplemented ! ( ) ,
579- InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: dreg)
580- | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: qreg) => unimplemented ! ( ) ,
581- InlineAsmRegClass :: Avr ( _) => unimplemented ! ( ) ,
582- InlineAsmRegClass :: Bpf ( _) => unimplemented ! ( ) ,
583- InlineAsmRegClass :: Hexagon ( HexagonInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
584- InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
585- InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: freg) => unimplemented ! ( ) ,
586- InlineAsmRegClass :: Msp430 ( _) => unimplemented ! ( ) ,
587- InlineAsmRegClass :: Nvptx ( NvptxInlineAsmRegClass :: reg16) => unimplemented ! ( ) ,
588- InlineAsmRegClass :: Nvptx ( NvptxInlineAsmRegClass :: reg32) => unimplemented ! ( ) ,
589- InlineAsmRegClass :: Nvptx ( NvptxInlineAsmRegClass :: reg64) => unimplemented ! ( ) ,
590- InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
591- InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: reg_nonzero) => unimplemented ! ( ) ,
592- InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: freg) => unimplemented ! ( ) ,
581+ | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: qreg_low4)
582+ | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: dreg)
583+ | InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: qreg) => "t" ,
584+ InlineAsmRegClass :: Avr ( AvrInlineAsmRegClass :: reg) => "r" ,
585+ InlineAsmRegClass :: Avr ( AvrInlineAsmRegClass :: reg_upper) => "d" ,
586+ InlineAsmRegClass :: Avr ( AvrInlineAsmRegClass :: reg_pair) => "r" ,
587+ InlineAsmRegClass :: Avr ( AvrInlineAsmRegClass :: reg_iw) => "w" ,
588+ InlineAsmRegClass :: Avr ( AvrInlineAsmRegClass :: reg_ptr) => "e" ,
589+ InlineAsmRegClass :: Bpf ( BpfInlineAsmRegClass :: reg) => "r" ,
590+ InlineAsmRegClass :: Bpf ( BpfInlineAsmRegClass :: wreg) => "w" ,
591+ InlineAsmRegClass :: Hexagon ( HexagonInlineAsmRegClass :: reg) => "r" ,
592+ InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: reg) => "d" , // more specific than "r"
593+ InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: freg) => "f" ,
594+ InlineAsmRegClass :: Msp430 ( Msp430InlineAsmRegClass :: reg) => "r" ,
595+ // https://github.com/gcc-mirror/gcc/blob/master/gcc/config/nvptx/nvptx.md -> look for
596+ // "define_constraint".
597+ InlineAsmRegClass :: Nvptx ( NvptxInlineAsmRegClass :: reg16) => "h" ,
598+ InlineAsmRegClass :: Nvptx ( NvptxInlineAsmRegClass :: reg32) => "r" ,
599+ InlineAsmRegClass :: Nvptx ( NvptxInlineAsmRegClass :: reg64) => "l" ,
600+
601+ InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: reg) => "r" ,
602+ InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: reg_nonzero) => "b" ,
603+ InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: freg) => "f" ,
593604 InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: cr)
594605 | InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: xer) => {
595606 unreachable ! ( "clobber-only" )
596607 } ,
597- InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
598- InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: freg) => unimplemented ! ( ) ,
599- InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: vreg) => unimplemented ! ( ) ,
608+ InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: reg) => "r" ,
609+ InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: freg) => "f" ,
610+ InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: vreg) => {
611+ unreachable ! ( "clobber-only" )
612+ }
600613 InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: reg) => "r" ,
601614 InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: reg_abcd) => "Q" ,
602615 InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: reg_byte) => "q" ,
603616 InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: xmm_reg)
604617 | InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: ymm_reg) => "x" ,
605618 InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: zmm_reg) => "v" ,
606619 InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: kreg) => "Yk" ,
607- InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: kreg0) => unimplemented ! ( ) ,
608- InlineAsmRegClass :: Wasm ( WasmInlineAsmRegClass :: local) => unimplemented ! ( ) ,
609620 InlineAsmRegClass :: X86 (
610- X86InlineAsmRegClass :: x87_reg | X86InlineAsmRegClass :: mmx_reg | X86InlineAsmRegClass :: tmm_reg,
621+ X86InlineAsmRegClass :: kreg0
622+ | X86InlineAsmRegClass :: x87_reg
623+ | X86InlineAsmRegClass :: mmx_reg
624+ | X86InlineAsmRegClass :: tmm_reg,
611625 ) => unreachable ! ( "clobber-only" ) ,
612626 InlineAsmRegClass :: SpirV ( SpirVInlineAsmRegClass :: reg) => {
613627 bug ! ( "GCC backend does not support SPIR-V" )
614628 }
615- InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
616- InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: freg) => unimplemented ! ( ) ,
629+ InlineAsmRegClass :: Wasm ( WasmInlineAsmRegClass :: local) => "r" ,
630+ InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: reg) => "r" ,
631+ InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: freg) => "f" ,
617632 InlineAsmRegClass :: Err => unreachable ! ( ) ,
618633 }
619634 } ;
0 commit comments