Skip to content

Commit e17e94e

Browse files
committed
Enable Xtensa codegen for rustc_codegen_gcc
* Updates uses of object::Architecture within the compiler
1 parent a8a2100 commit e17e94e

File tree

2 files changed

+12
-2
lines changed
  • compiler

2 files changed

+12
-2
lines changed

compiler/rustc_codegen_gcc/src/asm.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,9 @@ fn reg_class_to_gcc(reg_class: InlineAsmRegClass) -> &'static str {
720720
| X86InlineAsmRegClass::mmx_reg
721721
| X86InlineAsmRegClass::tmm_reg,
722722
) => unreachable!("clobber-only"),
723+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::reg) => "r",
724+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::freg) => "f",
725+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::breg) => "b",
723726
InlineAsmRegClass::SpirV(SpirVInlineAsmRegClass::reg) => {
724727
bug!("GCC backend does not support SPIR-V")
725728
}
@@ -825,7 +828,10 @@ fn dummy_output_type<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, reg: InlineAsmRegCl
825828
InlineAsmRegClass::CSKY(CSKYInlineAsmRegClass::freg) => cx.type_f32(),
826829
InlineAsmRegClass::SpirV(SpirVInlineAsmRegClass::reg) => {
827830
bug!("GCC backend does not support SPIR-V")
828-
}
831+
},
832+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::reg) => cx.type_i32(),
833+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::freg) => cx.type_f32(),
834+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::breg) => cx.type_i8(), // FIXME: should this be i1?
829835
InlineAsmRegClass::Err => unreachable!(),
830836
}
831837
}
@@ -1009,7 +1015,10 @@ fn modifier_to_gcc(
10091015
InlineAsmRegClass::CSKY(_) => None,
10101016
InlineAsmRegClass::SpirV(SpirVInlineAsmRegClass::reg) => {
10111017
bug!("LLVM backend does not support SPIR-V")
1012-
}
1018+
},
1019+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::reg) => unimplemented!(),
1020+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::freg) => unimplemented!(),
1021+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::breg) => unimplemented!(),
10131022
InlineAsmRegClass::Err => unreachable!(),
10141023
}
10151024
}

compiler/rustc_target/src/spec/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3638,6 +3638,7 @@ impl Target {
36383638
"avr" => (Architecture::Avr, None),
36393639
"msp430" => (Architecture::Msp430, None),
36403640
"hexagon" => (Architecture::Hexagon, None),
3641+
"xtensa" => (Architecture::Xtensa, None),
36413642
"bpf" => (Architecture::Bpf, None),
36423643
"loongarch32" => (Architecture::LoongArch32, None),
36433644
"loongarch64" => (Architecture::LoongArch64, None),

0 commit comments

Comments
 (0)