@@ -60,6 +60,7 @@ macro_rules! def_regs {
6060            #error = [ $( $bad_reg: literal) ,+]  => $error: literal, 
6161        ) * 
6262    } )  => { 
63+         #[ allow( unreachable_code) ] 
6364        #[ derive( Copy ,  Clone ,  RustcEncodable ,  RustcDecodable ,  Debug ,  Eq ,  PartialEq ,  Hash ,  HashStable_Generic ) ] 
6465        #[ allow( non_camel_case_types) ] 
6566        pub  enum  $arch_reg { 
@@ -102,19 +103,20 @@ macro_rules! def_regs {
102103        pub ( super )  fn  fill_reg_map( 
103104            _arch:  super :: InlineAsmArch , 
104105            mut  _has_feature:  impl  FnMut ( & str )  -> bool , 
105-             map :  & mut  rustc_data_structures:: fx:: FxHashMap <
106+             _map :  & mut  rustc_data_structures:: fx:: FxHashMap <
106107                super :: InlineAsmRegClass , 
107108                rustc_data_structures:: fx:: FxHashSet <super :: InlineAsmReg >, 
108109            >, 
109110        )  { 
111+             #[ allow( unused_imports) ] 
110112            use  super :: { InlineAsmReg ,  InlineAsmRegClass } ; 
111113            $( 
112114                if  $( $filter( _arch,  & mut  _has_feature,  true ) . is_ok( )  &&) ? true  { 
113-                     if  let  Some ( set)  = map . get_mut( & InlineAsmRegClass :: $arch( $arch_regclass:: $class) )  { 
115+                     if  let  Some ( set)  = _map . get_mut( & InlineAsmRegClass :: $arch( $arch_regclass:: $class) )  { 
114116                        set. insert( InlineAsmReg :: $arch( $arch_reg:: $reg) ) ; 
115117                    } 
116118                    $( 
117-                         if  let  Some ( set)  = map . get_mut( & InlineAsmRegClass :: $arch( $arch_regclass:: $extra_class) )  { 
119+                         if  let  Some ( set)  = _map . get_mut( & InlineAsmRegClass :: $arch( $arch_regclass:: $extra_class) )  { 
118120                            set. insert( InlineAsmReg :: $arch( $arch_reg:: $reg) ) ; 
119121                        } 
120122                    ) * 
@@ -146,11 +148,13 @@ macro_rules! types {
146148
147149mod  aarch64; 
148150mod  arm; 
151+ mod  nvptx; 
149152mod  riscv; 
150153mod  x86; 
151154
152155pub  use  aarch64:: { AArch64InlineAsmReg ,  AArch64InlineAsmRegClass } ; 
153156pub  use  arm:: { ArmInlineAsmReg ,  ArmInlineAsmRegClass } ; 
157+ pub  use  nvptx:: { NvptxInlineAsmReg ,  NvptxInlineAsmRegClass } ; 
154158pub  use  riscv:: { RiscVInlineAsmReg ,  RiscVInlineAsmRegClass } ; 
155159pub  use  x86:: { X86InlineAsmReg ,  X86InlineAsmRegClass } ; 
156160
@@ -162,6 +166,7 @@ pub enum InlineAsmArch {
162166    AArch64 , 
163167    RiscV32 , 
164168    RiscV64 , 
169+     Nvptx64 , 
165170} 
166171
167172impl  FromStr  for  InlineAsmArch  { 
@@ -175,6 +180,7 @@ impl FromStr for InlineAsmArch {
175180            "aarch64"  => Ok ( Self :: AArch64 ) , 
176181            "riscv32"  => Ok ( Self :: RiscV32 ) , 
177182            "riscv64"  => Ok ( Self :: RiscV64 ) , 
183+             "nvptx64"  => Ok ( Self :: Nvptx64 ) , 
178184            _ => Err ( ( ) ) , 
179185        } 
180186    } 
@@ -196,6 +202,7 @@ pub enum InlineAsmReg {
196202    Arm ( ArmInlineAsmReg ) , 
197203    AArch64 ( AArch64InlineAsmReg ) , 
198204    RiscV ( RiscVInlineAsmReg ) , 
205+     Nvptx ( NvptxInlineAsmReg ) , 
199206} 
200207
201208impl  InlineAsmReg  { 
@@ -236,6 +243,9 @@ impl InlineAsmReg {
236243            InlineAsmArch :: RiscV32  | InlineAsmArch :: RiscV64  => { 
237244                Self :: RiscV ( RiscVInlineAsmReg :: parse ( arch,  has_feature,  & name) ?) 
238245            } 
246+             InlineAsmArch :: Nvptx64  => { 
247+                 Self :: Nvptx ( NvptxInlineAsmReg :: parse ( arch,  has_feature,  & name) ?) 
248+             } 
239249        } ) 
240250    } 
241251
@@ -281,6 +291,7 @@ pub enum InlineAsmRegClass {
281291    Arm ( ArmInlineAsmRegClass ) , 
282292    AArch64 ( AArch64InlineAsmRegClass ) , 
283293    RiscV ( RiscVInlineAsmRegClass ) , 
294+     Nvptx ( NvptxInlineAsmRegClass ) , 
284295} 
285296
286297impl  InlineAsmRegClass  { 
@@ -290,6 +301,7 @@ impl InlineAsmRegClass {
290301            Self :: Arm ( r)  => r. name ( ) , 
291302            Self :: AArch64 ( r)  => r. name ( ) , 
292303            Self :: RiscV ( r)  => r. name ( ) , 
304+             Self :: Nvptx ( r)  => r. name ( ) , 
293305        } 
294306    } 
295307
@@ -302,6 +314,7 @@ impl InlineAsmRegClass {
302314            Self :: Arm ( r)  => r. suggest_class ( arch,  ty) . map ( InlineAsmRegClass :: Arm ) , 
303315            Self :: AArch64 ( r)  => r. suggest_class ( arch,  ty) . map ( InlineAsmRegClass :: AArch64 ) , 
304316            Self :: RiscV ( r)  => r. suggest_class ( arch,  ty) . map ( InlineAsmRegClass :: RiscV ) , 
317+             Self :: Nvptx ( r)  => r. suggest_class ( arch,  ty) . map ( InlineAsmRegClass :: Nvptx ) , 
305318        } 
306319    } 
307320
@@ -321,6 +334,7 @@ impl InlineAsmRegClass {
321334            Self :: Arm ( r)  => r. suggest_modifier ( arch,  ty) , 
322335            Self :: AArch64 ( r)  => r. suggest_modifier ( arch,  ty) , 
323336            Self :: RiscV ( r)  => r. suggest_modifier ( arch,  ty) , 
337+             Self :: Nvptx ( r)  => r. suggest_modifier ( arch,  ty) , 
324338        } 
325339    } 
326340
@@ -336,6 +350,7 @@ impl InlineAsmRegClass {
336350            Self :: Arm ( r)  => r. default_modifier ( arch) , 
337351            Self :: AArch64 ( r)  => r. default_modifier ( arch) , 
338352            Self :: RiscV ( r)  => r. default_modifier ( arch) , 
353+             Self :: Nvptx ( r)  => r. default_modifier ( arch) , 
339354        } 
340355    } 
341356
@@ -350,6 +365,7 @@ impl InlineAsmRegClass {
350365            Self :: Arm ( r)  => r. supported_types ( arch) , 
351366            Self :: AArch64 ( r)  => r. supported_types ( arch) , 
352367            Self :: RiscV ( r)  => r. supported_types ( arch) , 
368+             Self :: Nvptx ( r)  => r. supported_types ( arch) , 
353369        } 
354370    } 
355371
@@ -367,6 +383,7 @@ impl InlineAsmRegClass {
367383                InlineAsmArch :: RiscV32  | InlineAsmArch :: RiscV64  => { 
368384                    Self :: RiscV ( RiscVInlineAsmRegClass :: parse ( arch,  name) ?) 
369385                } 
386+                 InlineAsmArch :: Nvptx64  => Self :: Nvptx ( NvptxInlineAsmRegClass :: parse ( arch,  name) ?) , 
370387            } ) 
371388        } ) 
372389    } 
@@ -379,6 +396,7 @@ impl InlineAsmRegClass {
379396            Self :: Arm ( r)  => r. valid_modifiers ( arch) , 
380397            Self :: AArch64 ( r)  => r. valid_modifiers ( arch) , 
381398            Self :: RiscV ( r)  => r. valid_modifiers ( arch) , 
399+             Self :: Nvptx ( r)  => r. valid_modifiers ( arch) , 
382400        } 
383401    } 
384402} 
@@ -518,5 +536,10 @@ pub fn allocatable_registers(
518536            riscv:: fill_reg_map ( arch,  has_feature,  & mut  map) ; 
519537            map
520538        } 
539+         InlineAsmArch :: Nvptx64  => { 
540+             let  mut  map = nvptx:: regclass_map ( ) ; 
541+             nvptx:: fill_reg_map ( arch,  has_feature,  & mut  map) ; 
542+             map
543+         } 
521544    } 
522545} 
0 commit comments