@@ -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