Skip to content

Commit 31e9ca1

Browse files
MabezDevtaiki-eKerryRJ
committed
asm! support for the Xtensa architecture
Co-authored-by: Taiki Endo <te316e89@gmail.com> Co-authored-by: Kerry Jones <kerry@iodrive.co.za>
1 parent c880acd commit 31e9ca1

File tree

8 files changed

+501
-2
lines changed

8 files changed

+501
-2
lines changed

compiler/rustc_codegen_gcc/src/asm.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,11 @@ fn reg_class_to_gcc(reg_class: InlineAsmRegClass) -> &'static str {
732732
| X86InlineAsmRegClass::mmx_reg
733733
| X86InlineAsmRegClass::tmm_reg,
734734
) => unreachable!("clobber-only"),
735+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::reg) => "r",
736+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::freg) => "f",
737+
InlineAsmRegClass::Xtensa(
738+
XtensaInlineAsmRegClass::sreg | XtensaInlineAsmRegClass::breg,
739+
) => unreachable!("clobber-only"),
735740
InlineAsmRegClass::SpirV(SpirVInlineAsmRegClass::reg) => {
736741
bug!("GCC backend does not support SPIR-V")
737742
}
@@ -842,6 +847,11 @@ fn dummy_output_type<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, reg: InlineAsmRegCl
842847
InlineAsmRegClass::SpirV(SpirVInlineAsmRegClass::reg) => {
843848
bug!("GCC backend does not support SPIR-V")
844849
}
850+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::reg) => cx.type_i32(),
851+
InlineAsmRegClass::Xtensa(XtensaInlineAsmRegClass::freg) => cx.type_f32(),
852+
InlineAsmRegClass::Xtensa(
853+
XtensaInlineAsmRegClass::sreg | XtensaInlineAsmRegClass::breg,
854+
) => unreachable!("clobber-only"),
845855
InlineAsmRegClass::Err => unreachable!(),
846856
}
847857
}
@@ -1033,6 +1043,7 @@ fn modifier_to_gcc(
10331043
InlineAsmRegClass::SpirV(SpirVInlineAsmRegClass::reg) => {
10341044
bug!("LLVM backend does not support SPIR-V")
10351045
}
1046+
InlineAsmRegClass::Xtensa(_) => None,
10361047
InlineAsmRegClass::Err => unreachable!(),
10371048
}
10381049
}

compiler/rustc_codegen_llvm/src/asm.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ impl<'ll, 'tcx> AsmBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> {
278278
}
279279
InlineAsmArch::SpirV => {}
280280
InlineAsmArch::Wasm32 | InlineAsmArch::Wasm64 => {}
281+
InlineAsmArch::Xtensa => {}
281282
InlineAsmArch::Bpf => {}
282283
InlineAsmArch::Msp430 => {
283284
constraints.push("~{sr}".to_string());
@@ -682,6 +683,11 @@ fn reg_to_llvm(reg: InlineAsmRegOrRegClass, layout: Option<&TyAndLayout<'_>>) ->
682683
| X86InlineAsmRegClass::kreg0
683684
| X86InlineAsmRegClass::tmm_reg,
684685
) => unreachable!("clobber-only"),
686+
Xtensa(XtensaInlineAsmRegClass::freg) => "f",
687+
Xtensa(XtensaInlineAsmRegClass::reg) => "r",
688+
Xtensa(XtensaInlineAsmRegClass::sreg | XtensaInlineAsmRegClass::breg) => {
689+
unreachable!("clobber-only")
690+
}
685691
Wasm(WasmInlineAsmRegClass::local) => "r",
686692
Bpf(BpfInlineAsmRegClass::reg) => "r",
687693
Bpf(BpfInlineAsmRegClass::wreg) => "w",
@@ -787,6 +793,7 @@ fn modifier_to_llvm(
787793
| X86InlineAsmRegClass::kreg0
788794
| X86InlineAsmRegClass::tmm_reg,
789795
) => unreachable!("clobber-only"),
796+
Xtensa(_) => None,
790797
Wasm(WasmInlineAsmRegClass::local) => None,
791798
Bpf(_) => None,
792799
Avr(AvrInlineAsmRegClass::reg_pair)
@@ -862,6 +869,11 @@ fn dummy_output_type<'ll>(cx: &CodegenCx<'ll, '_>, reg: InlineAsmRegClass) -> &'
862869
| X86InlineAsmRegClass::kreg0
863870
| X86InlineAsmRegClass::tmm_reg,
864871
) => unreachable!("clobber-only"),
872+
Xtensa(XtensaInlineAsmRegClass::reg) => cx.type_i32(),
873+
Xtensa(XtensaInlineAsmRegClass::freg) => cx.type_f32(),
874+
Xtensa(XtensaInlineAsmRegClass::sreg | XtensaInlineAsmRegClass::breg) => {
875+
unreachable!("clobber-only")
876+
}
865877
Wasm(WasmInlineAsmRegClass::local) => cx.type_i32(),
866878
Bpf(BpfInlineAsmRegClass::reg) => cx.type_i64(),
867879
Bpf(BpfInlineAsmRegClass::wreg) => cx.type_i32(),

compiler/rustc_span/src/symbol.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,7 @@ symbols! {
525525
async_iterator,
526526
async_iterator_poll_next,
527527
async_trait_bounds,
528+
atomctl,
528529
atomic,
529530
atomic_and,
530531
atomic_cxchg,
@@ -598,6 +599,7 @@ symbols! {
598599
braced_empty_structs,
599600
branch,
600601
breakpoint,
602+
breg,
601603
bridge,
602604
bswap,
603605
btreemap_contains_key,
@@ -768,6 +770,7 @@ symbols! {
768770
contracts_requires,
769771
convert,
770772
convert_identity,
773+
coprocessor,
771774
copy,
772775
copy_closures,
773776
copy_nonoverlapping,
@@ -954,6 +957,7 @@ symbols! {
954957
ermsb_target_feature,
955958
exact_div,
956959
except,
960+
exception,
957961
exception_handling: "exception-handling",
958962
exchange_malloc,
959963
exclusive_range_pattern,
@@ -980,6 +984,7 @@ symbols! {
980984
expr_fragment_specifier_2024,
981985
extended_key_value_attributes,
982986
extended_varargs_abi_support,
987+
extendedl32r,
983988
extern_absolute_paths,
984989
extern_crate_item_prelude,
985990
extern_crate_self,
@@ -1097,6 +1102,9 @@ symbols! {
10971102
format_argument,
10981103
format_arguments,
10991104
format_macro,
1105+
format_placeholder,
1106+
format_unsafe_arg,
1107+
fp,
11001108
framework,
11011109
freeze,
11021110
freeze_impls,
@@ -1170,6 +1178,7 @@ symbols! {
11701178
hexagon_target_feature,
11711179
hidden,
11721180
hide,
1181+
highpriinterrupts,
11731182
hint,
11741183
homogeneous_aggregate,
11751184
host,
@@ -1256,6 +1265,7 @@ symbols! {
12561265
integral,
12571266
internal,
12581267
internal_features,
1268+
interrupt,
12591269
into_async_iter_into_iter,
12601270
into_future,
12611271
into_iter,
@@ -1362,6 +1372,7 @@ symbols! {
13621372
lt,
13631373
m68k,
13641374
m68k_target_feature,
1375+
mac16,
13651376
macro_at_most_once_rep,
13661377
macro_attr,
13671378
macro_attributes_in_derive_output,
@@ -1415,6 +1426,7 @@ symbols! {
14151426
mem_variant_count,
14161427
mem_zeroed,
14171428
member_constraints,
1429+
memctl,
14181430
memory,
14191431
memtag,
14201432
message,
@@ -1477,6 +1489,8 @@ symbols! {
14771489
mir_unwind_unreachable,
14781490
mir_variant,
14791491
miri,
1492+
misc,
1493+
miscsr,
14801494
mmx_reg,
14811495
modifiers,
14821496
module,
@@ -1731,6 +1745,8 @@ symbols! {
17311745
prelude_import,
17321746
preserves_flags,
17331747
prfchw_target_feature,
1748+
prid,
1749+
primitive,
17341750
print_macro,
17351751
println_macro,
17361752
proc_dash_macro: "proc-macro",
@@ -2001,8 +2017,10 @@ symbols! {
20012017
rustdoc_missing_doc_code_examples,
20022018
rustfmt,
20032019
rvalue_static_promotion,
2020+
rvector,
20042021
rwpi,
20052022
s,
2023+
s32c1i,
20062024
s390x,
20072025
s390x_target_feature,
20082026
s390x_target_feature_vector,
@@ -2245,9 +2263,12 @@ symbols! {
22452263
thread,
22462264
thread_local,
22472265
thread_local_macro,
2266+
threadptr,
22482267
three_way_compare,
22492268
thumb2,
22502269
thumb_mode: "thumb-mode",
2270+
time,
2271+
timerint,
22512272
tmm_reg,
22522273
to_owned_method,
22532274
to_string,
@@ -2467,6 +2488,7 @@ symbols! {
24672488
while_let,
24682489
whole_dash_archive: "whole-archive",
24692490
width,
2491+
windowed,
24702492
windows,
24712493
windows_subsystem,
24722494
with_negative_coherence,
@@ -2490,9 +2512,11 @@ symbols! {
24902512
x87_reg,
24912513
x87_target_feature,
24922514
xer,
2515+
xloop,
24932516
xmm_reg,
24942517
xop_target_feature,
24952518
xtensa,
2519+
xtensa_target_feature,
24962520
yeet_desugar_details,
24972521
yeet_expr,
24982522
yes,

0 commit comments

Comments
 (0)