@@ -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) ,
@@ -622,6 +640,7 @@ impl InlineAsmRegClass {
622640 Self :: Sparc ( r) => r. supported_types ( arch) ,
623641 Self :: SpirV ( r) => r. supported_types ( arch) ,
624642 Self :: Wasm ( r) => r. supported_types ( arch) ,
643+ Self :: Xtensa ( r) => r. supported_types ( arch) ,
625644 Self :: Bpf ( r) => r. supported_types ( arch) ,
626645 Self :: Avr ( r) => r. supported_types ( arch) ,
627646 Self :: Msp430 ( r) => r. supported_types ( arch) ,
@@ -662,6 +681,7 @@ impl InlineAsmRegClass {
662681 }
663682 InlineAsmArch :: Bpf => Self :: Bpf ( BpfInlineAsmRegClass :: parse ( name) ?) ,
664683 InlineAsmArch :: Avr => Self :: Avr ( AvrInlineAsmRegClass :: parse ( name) ?) ,
684+ InlineAsmArch :: Xtensa => Self :: Xtensa ( XtensaInlineAsmRegClass :: parse ( name) ?) ,
665685 InlineAsmArch :: Msp430 => Self :: Msp430 ( Msp430InlineAsmRegClass :: parse ( name) ?) ,
666686 InlineAsmArch :: M68k => Self :: M68k ( M68kInlineAsmRegClass :: parse ( name) ?) ,
667687 InlineAsmArch :: CSKY => Self :: CSKY ( CSKYInlineAsmRegClass :: parse ( name) ?) ,
@@ -685,6 +705,7 @@ impl InlineAsmRegClass {
685705 Self :: Sparc ( r) => r. valid_modifiers ( arch) ,
686706 Self :: SpirV ( r) => r. valid_modifiers ( arch) ,
687707 Self :: Wasm ( r) => r. valid_modifiers ( arch) ,
708+ Self :: Xtensa ( r) => r. valid_modifiers ( arch) ,
688709 Self :: Bpf ( r) => r. valid_modifiers ( arch) ,
689710 Self :: Avr ( r) => r. valid_modifiers ( arch) ,
690711 Self :: Msp430 ( r) => r. valid_modifiers ( arch) ,
@@ -729,6 +750,7 @@ impl fmt::Display for InlineAsmRegOrRegClass {
729750/// Set of types which can be used with a particular register class.
730751#[ derive( Copy , Clone , Debug , Eq , PartialEq ) ]
731752pub enum InlineAsmType {
753+ I1 ,
732754 I8 ,
733755 I16 ,
734756 I32 ,
@@ -756,6 +778,7 @@ impl InlineAsmType {
756778
757779 pub fn size ( self ) -> Size {
758780 Size :: from_bytes ( match self {
781+ Self :: I1 => return Size :: from_bits ( 1 ) ,
759782 Self :: I8 => 1 ,
760783 Self :: I16 => 2 ,
761784 Self :: I32 => 4 ,
@@ -781,6 +804,7 @@ impl InlineAsmType {
781804impl fmt:: Display for InlineAsmType {
782805 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
783806 match * self {
807+ Self :: I1 => f. write_str ( "i1" ) ,
784808 Self :: I8 => f. write_str ( "i8" ) ,
785809 Self :: I16 => f. write_str ( "i16" ) ,
786810 Self :: I32 => f. write_str ( "i32" ) ,
@@ -883,6 +907,11 @@ pub fn allocatable_registers(
883907 wasm:: fill_reg_map ( arch, reloc_model, target_features, target, & mut map) ;
884908 map
885909 }
910+ InlineAsmArch :: Xtensa => {
911+ let mut map = xtensa:: regclass_map ( ) ;
912+ xtensa:: fill_reg_map ( arch, reloc_model, target_features, target, & mut map) ;
913+ map
914+ }
886915 InlineAsmArch :: Bpf => {
887916 let mut map = bpf:: regclass_map ( ) ;
888917 bpf:: fill_reg_map ( arch, reloc_model, target_features, target, & mut map) ;
0 commit comments