@@ -155,6 +155,7 @@ mod hexagon;
155155mod mips;
156156mod nvptx;
157157mod riscv;
158+ mod spirv;
158159mod x86;
159160
160161pub use aarch64:: { AArch64InlineAsmReg , AArch64InlineAsmRegClass } ;
@@ -163,6 +164,7 @@ pub use hexagon::{HexagonInlineAsmReg, HexagonInlineAsmRegClass};
163164pub use mips:: { MipsInlineAsmReg , MipsInlineAsmRegClass } ;
164165pub use nvptx:: { NvptxInlineAsmReg , NvptxInlineAsmRegClass } ;
165166pub use riscv:: { RiscVInlineAsmReg , RiscVInlineAsmRegClass } ;
167+ pub use spirv:: { SpirVInlineAsmReg , SpirVInlineAsmRegClass } ;
166168pub use x86:: { X86InlineAsmReg , X86InlineAsmRegClass } ;
167169
168170#[ derive( Copy , Clone , Encodable , Decodable , Debug , Eq , PartialEq , Hash ) ]
@@ -177,6 +179,7 @@ pub enum InlineAsmArch {
177179 Hexagon ,
178180 Mips ,
179181 Mips64 ,
182+ SpirV ,
180183}
181184
182185impl FromStr for InlineAsmArch {
@@ -194,6 +197,7 @@ impl FromStr for InlineAsmArch {
194197 "hexagon" => Ok ( Self :: Hexagon ) ,
195198 "mips" => Ok ( Self :: Mips ) ,
196199 "mips64" => Ok ( Self :: Mips64 ) ,
200+ "spirv" => Ok ( Self :: SpirV ) ,
197201 _ => Err ( ( ) ) ,
198202 }
199203 }
@@ -208,6 +212,7 @@ pub enum InlineAsmReg {
208212 Nvptx ( NvptxInlineAsmReg ) ,
209213 Hexagon ( HexagonInlineAsmReg ) ,
210214 Mips ( MipsInlineAsmReg ) ,
215+ SpirV ( SpirVInlineAsmReg ) ,
211216}
212217
213218impl InlineAsmReg {
@@ -264,6 +269,9 @@ impl InlineAsmReg {
264269 InlineAsmArch :: Mips | InlineAsmArch :: Mips64 => {
265270 Self :: Mips ( MipsInlineAsmReg :: parse ( arch, has_feature, target, & name) ?)
266271 }
272+ InlineAsmArch :: SpirV => {
273+ Self :: SpirV ( SpirVInlineAsmReg :: parse ( arch, has_feature, target, & name) ?)
274+ }
267275 } )
268276 }
269277
@@ -306,6 +314,7 @@ pub enum InlineAsmRegClass {
306314 Nvptx ( NvptxInlineAsmRegClass ) ,
307315 Hexagon ( HexagonInlineAsmRegClass ) ,
308316 Mips ( MipsInlineAsmRegClass ) ,
317+ SpirV ( SpirVInlineAsmRegClass ) ,
309318}
310319
311320impl InlineAsmRegClass {
@@ -318,6 +327,7 @@ impl InlineAsmRegClass {
318327 Self :: Nvptx ( r) => r. name ( ) ,
319328 Self :: Hexagon ( r) => r. name ( ) ,
320329 Self :: Mips ( r) => r. name ( ) ,
330+ Self :: SpirV ( r) => r. name ( ) ,
321331 }
322332 }
323333
@@ -333,6 +343,7 @@ impl InlineAsmRegClass {
333343 Self :: Nvptx ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Nvptx ) ,
334344 Self :: Hexagon ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Hexagon ) ,
335345 Self :: Mips ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Mips ) ,
346+ Self :: SpirV ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: SpirV ) ,
336347 }
337348 }
338349
@@ -355,6 +366,7 @@ impl InlineAsmRegClass {
355366 Self :: Nvptx ( r) => r. suggest_modifier ( arch, ty) ,
356367 Self :: Hexagon ( r) => r. suggest_modifier ( arch, ty) ,
357368 Self :: Mips ( r) => r. suggest_modifier ( arch, ty) ,
369+ Self :: SpirV ( r) => r. suggest_modifier ( arch, ty) ,
358370 }
359371 }
360372
@@ -373,6 +385,7 @@ impl InlineAsmRegClass {
373385 Self :: Nvptx ( r) => r. default_modifier ( arch) ,
374386 Self :: Hexagon ( r) => r. default_modifier ( arch) ,
375387 Self :: Mips ( r) => r. default_modifier ( arch) ,
388+ Self :: SpirV ( r) => r. default_modifier ( arch) ,
376389 }
377390 }
378391
@@ -390,6 +403,7 @@ impl InlineAsmRegClass {
390403 Self :: Nvptx ( r) => r. supported_types ( arch) ,
391404 Self :: Hexagon ( r) => r. supported_types ( arch) ,
392405 Self :: Mips ( r) => r. supported_types ( arch) ,
406+ Self :: SpirV ( r) => r. supported_types ( arch) ,
393407 }
394408 }
395409
@@ -414,6 +428,7 @@ impl InlineAsmRegClass {
414428 InlineAsmArch :: Mips | InlineAsmArch :: Mips64 => {
415429 Self :: Mips ( MipsInlineAsmRegClass :: parse ( arch, name) ?)
416430 }
431+ InlineAsmArch :: SpirV => Self :: SpirV ( SpirVInlineAsmRegClass :: parse ( arch, name) ?) ,
417432 } )
418433 } )
419434 }
@@ -429,6 +444,7 @@ impl InlineAsmRegClass {
429444 Self :: Nvptx ( r) => r. valid_modifiers ( arch) ,
430445 Self :: Hexagon ( r) => r. valid_modifiers ( arch) ,
431446 Self :: Mips ( r) => r. valid_modifiers ( arch) ,
447+ Self :: SpirV ( r) => r. valid_modifiers ( arch) ,
432448 }
433449 }
434450}
@@ -571,5 +587,10 @@ pub fn allocatable_registers(
571587 mips:: fill_reg_map ( arch, has_feature, target, & mut map) ;
572588 map
573589 }
590+ InlineAsmArch :: SpirV => {
591+ let mut map = spirv:: regclass_map ( ) ;
592+ spirv:: fill_reg_map ( arch, has_feature, target, & mut map) ;
593+ map
594+ }
574595 }
575596}
0 commit comments