@@ -564,56 +564,72 @@ fn reg_to_gcc(reg: InlineAsmRegOrRegClass) -> ConstraintOrRegister {
564
564
_ => unimplemented ! ( ) ,
565
565
}
566
566
} ,
567
+ // They can be retrieved from https://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html
567
568
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" ,
573
576
InlineAsmRegClass :: Arm ( ArmInlineAsmRegClass :: sreg)
574
577
| 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)
577
580
| 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
+ // For the NVPTX target, could only find the information from LLVM at
596
+ // https://llvm.org/docs/LangRef.html#supported-constraint-code-list so they might be
597
+ // incorrect.
598
+ InlineAsmRegClass :: Nvptx ( NvptxInlineAsmRegClass :: reg16) => "h" ,
599
+ InlineAsmRegClass :: Nvptx ( NvptxInlineAsmRegClass :: reg32) => "r" ,
600
+ InlineAsmRegClass :: Nvptx ( NvptxInlineAsmRegClass :: reg64) => "l" ,
601
+
602
+ InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: reg) => "r" ,
603
+ InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: reg_nonzero) => "b" ,
604
+ InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: freg) => "f" ,
593
605
InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: cr)
594
606
| InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: xer) => {
595
607
unreachable ! ( "clobber-only" )
596
608
} ,
597
- InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
598
- InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: freg) => unimplemented ! ( ) ,
599
- InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: vreg) => unimplemented ! ( ) ,
609
+ InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: reg) => "r" ,
610
+ InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: freg) => "f" ,
611
+ InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: vreg) => {
612
+ unreachable ! ( "clobber-only" )
613
+ }
600
614
InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: reg) => "r" ,
601
615
InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: reg_abcd) => "Q" ,
602
616
InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: reg_byte) => "q" ,
603
617
InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: xmm_reg)
604
618
| InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: ymm_reg) => "x" ,
605
619
InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: zmm_reg) => "v" ,
606
620
InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: kreg) => "Yk" ,
607
- InlineAsmRegClass :: X86 ( X86InlineAsmRegClass :: kreg0) => unimplemented ! ( ) ,
608
- InlineAsmRegClass :: Wasm ( WasmInlineAsmRegClass :: local) => unimplemented ! ( ) ,
609
621
InlineAsmRegClass :: X86 (
610
- X86InlineAsmRegClass :: x87_reg | X86InlineAsmRegClass :: mmx_reg | X86InlineAsmRegClass :: tmm_reg,
622
+ X86InlineAsmRegClass :: kreg0
623
+ | X86InlineAsmRegClass :: x87_reg
624
+ | X86InlineAsmRegClass :: mmx_reg
625
+ | X86InlineAsmRegClass :: tmm_reg,
611
626
) => unreachable ! ( "clobber-only" ) ,
612
627
InlineAsmRegClass :: SpirV ( SpirVInlineAsmRegClass :: reg) => {
613
628
bug ! ( "GCC backend does not support SPIR-V" )
614
629
}
615
- InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
616
- InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: freg) => unimplemented ! ( ) ,
630
+ InlineAsmRegClass :: Wasm ( WasmInlineAsmRegClass :: local) => "r" ,
631
+ InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: reg) => "r" ,
632
+ InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: freg) => "f" ,
617
633
InlineAsmRegClass :: Err => unreachable ! ( ) ,
618
634
}
619
635
} ;
0 commit comments