Skip to content

Commit fda1ffd

Browse files
authored
Merge pull request rust-lang#8 from zedar/I60_asm_conversion_from_register_to_gcc
Add missing mappings from register classes to dummy output types
2 parents 51eae7e + 94ca828 commit fda1ffd

File tree

1 file changed

+30
-19
lines changed

1 file changed

+30
-19
lines changed

src/asm.rs

+30-19
Original file line numberDiff line numberDiff line change
@@ -694,10 +694,12 @@ fn reg_to_gcc(reg: InlineAsmRegOrRegClass) -> ConstraintOrRegister {
694694
fn dummy_output_type<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, reg: InlineAsmRegClass) -> Type<'gcc> {
695695
match reg {
696696
InlineAsmRegClass::AArch64(AArch64InlineAsmRegClass::reg) => cx.type_i32(),
697-
InlineAsmRegClass::AArch64(AArch64InlineAsmRegClass::preg) => unimplemented!(),
698697
InlineAsmRegClass::AArch64(AArch64InlineAsmRegClass::vreg)
699698
| InlineAsmRegClass::AArch64(AArch64InlineAsmRegClass::vreg_low16) => {
700-
unimplemented!()
699+
cx.type_vector(cx.type_i64(), 2)
700+
}
701+
InlineAsmRegClass::AArch64(AArch64InlineAsmRegClass::preg) => {
702+
unreachable!("clobber-only")
701703
}
702704
InlineAsmRegClass::Arm(ArmInlineAsmRegClass::reg) => cx.type_i32(),
703705
InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg)
@@ -708,21 +710,13 @@ fn dummy_output_type<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, reg: InlineAsmRegCl
708710
InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg)
709711
| InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low8)
710712
| InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low4) => {
711-
unimplemented!()
713+
cx.type_vector(cx.type_i64(), 2)
712714
}
713-
InlineAsmRegClass::Avr(_) => unimplemented!(),
714-
InlineAsmRegClass::Bpf(_) => unimplemented!(),
715715
InlineAsmRegClass::Hexagon(HexagonInlineAsmRegClass::reg) => cx.type_i32(),
716716
InlineAsmRegClass::LoongArch(LoongArchInlineAsmRegClass::reg) => cx.type_i32(),
717717
InlineAsmRegClass::LoongArch(LoongArchInlineAsmRegClass::freg) => cx.type_f32(),
718-
InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg) => cx.type_i32(),
719-
InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_addr) => cx.type_i32(),
720-
InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_data) => cx.type_i32(),
721-
InlineAsmRegClass::CSKY(CSKYInlineAsmRegClass::reg) => cx.type_i32(),
722-
InlineAsmRegClass::CSKY(CSKYInlineAsmRegClass::freg) => cx.type_f32(),
723718
InlineAsmRegClass::Mips(MipsInlineAsmRegClass::reg) => cx.type_i32(),
724719
InlineAsmRegClass::Mips(MipsInlineAsmRegClass::freg) => cx.type_f32(),
725-
InlineAsmRegClass::Msp430(_) => unimplemented!(),
726720
InlineAsmRegClass::Nvptx(NvptxInlineAsmRegClass::reg16) => cx.type_i16(),
727721
InlineAsmRegClass::Nvptx(NvptxInlineAsmRegClass::reg32) => cx.type_i32(),
728722
InlineAsmRegClass::Nvptx(NvptxInlineAsmRegClass::reg64) => cx.type_i64(),
@@ -735,26 +729,43 @@ fn dummy_output_type<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, reg: InlineAsmRegCl
735729
}
736730
InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg) => cx.type_i32(),
737731
InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg) => cx.type_f32(),
738-
InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg) => cx.type_f32(),
732+
InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg) => {
733+
unreachable!("clobber-only")
734+
}
739735
InlineAsmRegClass::X86(X86InlineAsmRegClass::reg)
740736
| InlineAsmRegClass::X86(X86InlineAsmRegClass::reg_abcd) => cx.type_i32(),
741737
InlineAsmRegClass::X86(X86InlineAsmRegClass::reg_byte) => cx.type_i8(),
742-
InlineAsmRegClass::X86(X86InlineAsmRegClass::mmx_reg) => unimplemented!(),
743738
InlineAsmRegClass::X86(X86InlineAsmRegClass::xmm_reg)
744739
| InlineAsmRegClass::X86(X86InlineAsmRegClass::ymm_reg)
745740
| InlineAsmRegClass::X86(X86InlineAsmRegClass::zmm_reg) => cx.type_f32(),
746-
InlineAsmRegClass::X86(X86InlineAsmRegClass::x87_reg) => unimplemented!(),
747741
InlineAsmRegClass::X86(X86InlineAsmRegClass::kreg) => cx.type_i16(),
748-
InlineAsmRegClass::X86(X86InlineAsmRegClass::kreg0) => cx.type_i16(),
749-
InlineAsmRegClass::X86(X86InlineAsmRegClass::tmm_reg) => unimplemented!(),
750-
InlineAsmRegClass::Wasm(WasmInlineAsmRegClass::local) => cx.type_i32(),
751-
InlineAsmRegClass::SpirV(SpirVInlineAsmRegClass::reg) => {
752-
bug!("LLVM backend does not support SPIR-V")
742+
InlineAsmRegClass::X86(X86InlineAsmRegClass::x87_reg)
743+
| InlineAsmRegClass::X86(X86InlineAsmRegClass::mmx_reg)
744+
| InlineAsmRegClass::X86(X86InlineAsmRegClass::kreg0)
745+
| InlineAsmRegClass::X86(X86InlineAsmRegClass::tmm_reg) => {
746+
unreachable!("clobber-only")
753747
}
748+
InlineAsmRegClass::Wasm(WasmInlineAsmRegClass::local) => cx.type_i32(),
749+
InlineAsmRegClass::Bpf(BpfInlineAsmRegClass::reg) => cx.type_i64(),
750+
InlineAsmRegClass::Bpf(BpfInlineAsmRegClass::wreg) => cx.type_i32(),
751+
InlineAsmRegClass::Avr(AvrInlineAsmRegClass::reg) => cx.type_i8(),
752+
InlineAsmRegClass::Avr(AvrInlineAsmRegClass::reg_upper) => cx.type_i8(),
753+
InlineAsmRegClass::Avr(AvrInlineAsmRegClass::reg_pair) => cx.type_i16(),
754+
InlineAsmRegClass::Avr(AvrInlineAsmRegClass::reg_iw) => cx.type_i16(),
755+
InlineAsmRegClass::Avr(AvrInlineAsmRegClass::reg_ptr) => cx.type_i16(),
754756
InlineAsmRegClass::S390x(
755757
S390xInlineAsmRegClass::reg | S390xInlineAsmRegClass::reg_addr,
756758
) => cx.type_i32(),
757759
InlineAsmRegClass::S390x(S390xInlineAsmRegClass::freg) => cx.type_f64(),
760+
InlineAsmRegClass::Msp430(Msp430InlineAsmRegClass::reg) => cx.type_i16(),
761+
InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg) => cx.type_i32(),
762+
InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_addr) => cx.type_i32(),
763+
InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_data) => cx.type_i32(),
764+
InlineAsmRegClass::CSKY(CSKYInlineAsmRegClass::reg) => cx.type_i32(),
765+
InlineAsmRegClass::CSKY(CSKYInlineAsmRegClass::freg) => cx.type_f32(),
766+
InlineAsmRegClass::SpirV(SpirVInlineAsmRegClass::reg) => {
767+
bug!("GCC backend does not support SPIR-V")
768+
}
758769
InlineAsmRegClass::Err => unreachable!(),
759770
}
760771
}

0 commit comments

Comments
 (0)