Skip to content

Commit 95996c4

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

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
@@ -717,6 +717,9 @@ fn reg_class_to_gcc(reg_class: InlineAsmRegClass) -> &'static str {
717717
| X86InlineAsmRegClass::mmx_reg
718718
| X86InlineAsmRegClass::tmm_reg,
719719
) => unreachable!("clobber-only"),
720+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::reg) => "r",
721+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::freg) => "f",
722+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::breg) => "b",
720723
InlineAsmRegClass::SpirV(SpirVInlineAsmRegClass::reg) => {
721724
bug!("GCC backend does not support SPIR-V")
722725
}
@@ -822,7 +825,10 @@ fn dummy_output_type<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, reg: InlineAsmRegCl
822825
InlineAsmRegClass::CSKY(CSKYInlineAsmRegClass::freg) => cx.type_f32(),
823826
InlineAsmRegClass::SpirV(SpirVInlineAsmRegClass::reg) => {
824827
bug!("GCC backend does not support SPIR-V")
825-
}
828+
},
829+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::reg) => cx.type_i32(),
830+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::freg) => cx.type_f32(),
831+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::breg) => cx.type_i8(), // FIXME: should this be i1?
826832
InlineAsmRegClass::Err => unreachable!(),
827833
}
828834
}
@@ -1006,7 +1012,10 @@ fn modifier_to_gcc(
10061012
InlineAsmRegClass::CSKY(_) => None,
10071013
InlineAsmRegClass::SpirV(SpirVInlineAsmRegClass::reg) => {
10081014
bug!("LLVM backend does not support SPIR-V")
1009-
}
1015+
},
1016+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::reg) => unimplemented!(),
1017+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::freg) => unimplemented!(),
1018+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::breg) => unimplemented!(),
10101019
InlineAsmRegClass::Err => unreachable!(),
10111020
}
10121021
}

compiler/rustc_target/src/spec/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3605,6 +3605,7 @@ impl Target {
36053605
"avr" => (Architecture::Avr, None),
36063606
"msp430" => (Architecture::Msp430, None),
36073607
"hexagon" => (Architecture::Hexagon, None),
3608+
"xtensa" => (Architecture::Xtensa, None),
36083609
"bpf" => (Architecture::Bpf, None),
36093610
"loongarch64" => (Architecture::LoongArch64, None),
36103611
"csky" => (Architecture::Csky, None),

0 commit comments

Comments
 (0)