@@ -195,6 +195,7 @@ mod sparc;
195195mod spirv;
196196mod wasm;
197197mod x86;
198+ mod xtensa;
198199
199200pub use aarch64:: { AArch64InlineAsmReg , AArch64InlineAsmRegClass } ;
200201pub use arm:: { ArmInlineAsmReg , ArmInlineAsmRegClass } ;
@@ -213,6 +214,7 @@ pub use s390x::{S390xInlineAsmReg, S390xInlineAsmRegClass};
213214pub use sparc:: { SparcInlineAsmReg , SparcInlineAsmRegClass } ;
214215pub use spirv:: { SpirVInlineAsmReg , SpirVInlineAsmRegClass } ;
215216pub use wasm:: { WasmInlineAsmReg , WasmInlineAsmRegClass } ;
217+ pub use xtensa:: { XtensaInlineAsmReg , XtensaInlineAsmRegClass } ;
216218pub use x86:: { X86InlineAsmReg , X86InlineAsmRegClass } ;
217219
218220#[ derive( Copy , Clone , Encodable , Decodable , Debug , Eq , PartialEq , Hash ) ]
@@ -237,6 +239,7 @@ pub enum InlineAsmArch {
237239 SpirV ,
238240 Wasm32 ,
239241 Wasm64 ,
242+ Xtensa ,
240243 Bpf ,
241244 Avr ,
242245 Msp430 ,
@@ -269,6 +272,7 @@ impl FromStr for InlineAsmArch {
269272 "spirv" => Ok ( Self :: SpirV ) ,
270273 "wasm32" => Ok ( Self :: Wasm32 ) ,
271274 "wasm64" => Ok ( Self :: Wasm64 ) ,
275+ "xtensa" => Ok ( Self :: Xtensa ) ,
272276 "bpf" => Ok ( Self :: Bpf ) ,
273277 "avr" => Ok ( Self :: Avr ) ,
274278 "msp430" => Ok ( Self :: Msp430 ) ,
@@ -295,6 +299,7 @@ pub enum InlineAsmReg {
295299 Sparc ( SparcInlineAsmReg ) ,
296300 SpirV ( SpirVInlineAsmReg ) ,
297301 Wasm ( WasmInlineAsmReg ) ,
302+ Xtensa ( XtensaInlineAsmReg ) ,
298303 Bpf ( BpfInlineAsmReg ) ,
299304 Avr ( AvrInlineAsmReg ) ,
300305 Msp430 ( Msp430InlineAsmReg ) ,
@@ -317,6 +322,7 @@ impl InlineAsmReg {
317322 Self :: Mips ( r) => r. name ( ) ,
318323 Self :: S390x ( r) => r. name ( ) ,
319324 Self :: Sparc ( r) => r. name ( ) ,
325+ Self :: Xtensa ( r) => r. name ( ) ,
320326 Self :: Bpf ( r) => r. name ( ) ,
321327 Self :: Avr ( r) => r. name ( ) ,
322328 Self :: Msp430 ( r) => r. name ( ) ,
@@ -338,6 +344,7 @@ impl InlineAsmReg {
338344 Self :: Mips ( r) => InlineAsmRegClass :: Mips ( r. reg_class ( ) ) ,
339345 Self :: S390x ( r) => InlineAsmRegClass :: S390x ( r. reg_class ( ) ) ,
340346 Self :: Sparc ( r) => InlineAsmRegClass :: Sparc ( r. reg_class ( ) ) ,
347+ Self :: Xtensa ( r) => InlineAsmRegClass :: Xtensa ( r. reg_class ( ) ) ,
341348 Self :: Bpf ( r) => InlineAsmRegClass :: Bpf ( r. reg_class ( ) ) ,
342349 Self :: Avr ( r) => InlineAsmRegClass :: Avr ( r. reg_class ( ) ) ,
343350 Self :: Msp430 ( r) => InlineAsmRegClass :: Msp430 ( r. reg_class ( ) ) ,
@@ -369,6 +376,9 @@ impl InlineAsmReg {
369376 InlineAsmArch :: Mips | InlineAsmArch :: Mips64 => {
370377 Self :: Mips ( MipsInlineAsmReg :: parse ( name) ?)
371378 }
379+ InlineAsmArch :: Xtensa => {
380+ Self :: Xtensa ( XtensaInlineAsmReg :: parse ( name) ?)
381+ }
372382 InlineAsmArch :: S390x => Self :: S390x ( S390xInlineAsmReg :: parse ( name) ?) ,
373383 InlineAsmArch :: Sparc | InlineAsmArch :: Sparc64 => {
374384 Self :: Sparc ( SparcInlineAsmReg :: parse ( name) ?)
@@ -408,6 +418,7 @@ impl InlineAsmReg {
408418 Self :: Sparc ( r) => r. validate ( arch, reloc_model, target_features, target, is_clobber) ,
409419 Self :: Bpf ( r) => r. validate ( arch, reloc_model, target_features, target, is_clobber) ,
410420 Self :: Avr ( r) => r. validate ( arch, reloc_model, target_features, target, is_clobber) ,
421+ Self :: Xtensa ( r) => r. validate ( arch, reloc_model, target_features, target, is_clobber) ,
411422 Self :: Msp430 ( r) => r. validate ( arch, reloc_model, target_features, target, is_clobber) ,
412423 Self :: M68k ( r) => r. validate ( arch, reloc_model, target_features, target, is_clobber) ,
413424 Self :: CSKY ( r) => r. validate ( arch, reloc_model, target_features, target, is_clobber) ,
@@ -434,6 +445,7 @@ impl InlineAsmReg {
434445 Self :: Mips ( r) => r. emit ( out, arch, modifier) ,
435446 Self :: S390x ( r) => r. emit ( out, arch, modifier) ,
436447 Self :: Sparc ( r) => r. emit ( out, arch, modifier) ,
448+ Self :: Xtensa ( r) => r. emit ( out, arch, modifier) ,
437449 Self :: Bpf ( r) => r. emit ( out, arch, modifier) ,
438450 Self :: Avr ( r) => r. emit ( out, arch, modifier) ,
439451 Self :: Msp430 ( r) => r. emit ( out, arch, modifier) ,
@@ -455,6 +467,7 @@ impl InlineAsmReg {
455467 Self :: Mips ( _) => cb ( self ) ,
456468 Self :: S390x ( r) => r. overlapping_regs ( |r| cb ( Self :: S390x ( r) ) ) ,
457469 Self :: Sparc ( _) => cb ( self ) ,
470+ Self :: Xtensa ( _) => cb ( self ) ,
458471 Self :: Bpf ( r) => r. overlapping_regs ( |r| cb ( Self :: Bpf ( r) ) ) ,
459472 Self :: Avr ( r) => r. overlapping_regs ( |r| cb ( Self :: Avr ( r) ) ) ,
460473 Self :: Msp430 ( _) => cb ( self ) ,
@@ -481,6 +494,7 @@ pub enum InlineAsmRegClass {
481494 Sparc ( SparcInlineAsmRegClass ) ,
482495 SpirV ( SpirVInlineAsmRegClass ) ,
483496 Wasm ( WasmInlineAsmRegClass ) ,
497+ Xtensa ( XtensaInlineAsmRegClass ) ,
484498 Bpf ( BpfInlineAsmRegClass ) ,
485499 Avr ( AvrInlineAsmRegClass ) ,
486500 Msp430 ( Msp430InlineAsmRegClass ) ,
@@ -506,6 +520,7 @@ impl InlineAsmRegClass {
506520 Self :: Sparc ( r) => r. name ( ) ,
507521 Self :: SpirV ( r) => r. name ( ) ,
508522 Self :: Wasm ( r) => r. name ( ) ,
523+ Self :: Xtensa ( r) => r. name ( ) ,
509524 Self :: Bpf ( r) => r. name ( ) ,
510525 Self :: Avr ( r) => r. name ( ) ,
511526 Self :: Msp430 ( r) => r. name ( ) ,
@@ -533,6 +548,7 @@ impl InlineAsmRegClass {
533548 Self :: Sparc ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Sparc ) ,
534549 Self :: SpirV ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: SpirV ) ,
535550 Self :: Wasm ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Wasm ) ,
551+ Self :: Xtensa ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Xtensa ) ,
536552 Self :: Bpf ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Bpf ) ,
537553 Self :: Avr ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Avr ) ,
538554 Self :: Msp430 ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Msp430 ) ,
@@ -563,6 +579,7 @@ impl InlineAsmRegClass {
563579 Self :: Sparc ( r) => r. suggest_modifier ( arch, ty) ,
564580 Self :: SpirV ( r) => r. suggest_modifier ( arch, ty) ,
565581 Self :: Wasm ( r) => r. suggest_modifier ( arch, ty) ,
582+ Self :: Xtensa ( r) => r. suggest_modifier ( arch, ty) ,
566583 Self :: Bpf ( r) => r. suggest_modifier ( arch, ty) ,
567584 Self :: Avr ( r) => r. suggest_modifier ( arch, ty) ,
568585 Self :: Msp430 ( r) => r. suggest_modifier ( arch, ty) ,
@@ -593,6 +610,7 @@ impl InlineAsmRegClass {
593610 Self :: Sparc ( r) => r. default_modifier ( arch) ,
594611 Self :: SpirV ( r) => r. default_modifier ( arch) ,
595612 Self :: Wasm ( r) => r. default_modifier ( arch) ,
613+ Self :: Xtensa ( r) => r. default_modifier ( arch) ,
596614 Self :: Bpf ( r) => r. default_modifier ( arch) ,
597615 Self :: Avr ( r) => r. default_modifier ( arch) ,
598616 Self :: Msp430 ( r) => r. default_modifier ( arch) ,
@@ -626,6 +644,7 @@ impl InlineAsmRegClass {
626644 Self :: Sparc ( r) => r. supported_types ( arch) ,
627645 Self :: SpirV ( r) => r. supported_types ( arch) ,
628646 Self :: Wasm ( r) => r. supported_types ( arch) ,
647+ Self :: Xtensa ( r) => r. supported_types ( arch) ,
629648 Self :: Bpf ( r) => r. supported_types ( arch) ,
630649 Self :: Avr ( r) => r. supported_types ( arch) ,
631650 Self :: Msp430 ( r) => r. supported_types ( arch) ,
@@ -666,6 +685,7 @@ impl InlineAsmRegClass {
666685 }
667686 InlineAsmArch :: Bpf => Self :: Bpf ( BpfInlineAsmRegClass :: parse ( name) ?) ,
668687 InlineAsmArch :: Avr => Self :: Avr ( AvrInlineAsmRegClass :: parse ( name) ?) ,
688+ InlineAsmArch :: Xtensa => Self :: Xtensa ( XtensaInlineAsmRegClass :: parse ( name) ?) ,
669689 InlineAsmArch :: Msp430 => Self :: Msp430 ( Msp430InlineAsmRegClass :: parse ( name) ?) ,
670690 InlineAsmArch :: M68k => Self :: M68k ( M68kInlineAsmRegClass :: parse ( name) ?) ,
671691 InlineAsmArch :: CSKY => Self :: CSKY ( CSKYInlineAsmRegClass :: parse ( name) ?) ,
@@ -689,6 +709,7 @@ impl InlineAsmRegClass {
689709 Self :: Sparc ( r) => r. valid_modifiers ( arch) ,
690710 Self :: SpirV ( r) => r. valid_modifiers ( arch) ,
691711 Self :: Wasm ( r) => r. valid_modifiers ( arch) ,
712+ Self :: Xtensa ( r) => r. valid_modifiers ( arch) ,
692713 Self :: Bpf ( r) => r. valid_modifiers ( arch) ,
693714 Self :: Avr ( r) => r. valid_modifiers ( arch) ,
694715 Self :: Msp430 ( r) => r. valid_modifiers ( arch) ,
@@ -736,6 +757,7 @@ impl fmt::Display for InlineAsmRegOrRegClass {
736757/// Set of types which can be used with a particular register class.
737758#[ derive( Copy , Clone , Debug , Eq , PartialEq ) ]
738759pub enum InlineAsmType {
760+ I1 ,
739761 I8 ,
740762 I16 ,
741763 I32 ,
@@ -763,6 +785,7 @@ impl InlineAsmType {
763785
764786 pub fn size ( self ) -> Size {
765787 Size :: from_bytes ( match self {
788+ Self :: I1 => return Size :: from_bits ( 1 ) ,
766789 Self :: I8 => 1 ,
767790 Self :: I16 => 2 ,
768791 Self :: I32 => 4 ,
@@ -788,6 +811,7 @@ impl InlineAsmType {
788811impl fmt:: Display for InlineAsmType {
789812 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
790813 match * self {
814+ Self :: I1 => f. write_str ( "i1" ) ,
791815 Self :: I8 => f. write_str ( "i8" ) ,
792816 Self :: I16 => f. write_str ( "i16" ) ,
793817 Self :: I32 => f. write_str ( "i32" ) ,
@@ -890,6 +914,11 @@ pub fn allocatable_registers(
890914 wasm:: fill_reg_map ( arch, reloc_model, target_features, target, & mut map) ;
891915 map
892916 }
917+ InlineAsmArch :: Xtensa => {
918+ let mut map = xtensa:: regclass_map ( ) ;
919+ xtensa:: fill_reg_map ( arch, reloc_model, target_features, target, & mut map) ;
920+ map
921+ }
893922 InlineAsmArch :: Bpf => {
894923 let mut map = bpf:: regclass_map ( ) ;
895924 bpf:: fill_reg_map ( arch, reloc_model, target_features, target, & mut map) ;
0 commit comments