@@ -155,6 +155,7 @@ mod hexagon;
155
155
mod mips;
156
156
mod nvptx;
157
157
mod riscv;
158
+ mod spirv;
158
159
mod x86;
159
160
160
161
pub use aarch64:: { AArch64InlineAsmReg , AArch64InlineAsmRegClass } ;
@@ -163,6 +164,7 @@ pub use hexagon::{HexagonInlineAsmReg, HexagonInlineAsmRegClass};
163
164
pub use mips:: { MipsInlineAsmReg , MipsInlineAsmRegClass } ;
164
165
pub use nvptx:: { NvptxInlineAsmReg , NvptxInlineAsmRegClass } ;
165
166
pub use riscv:: { RiscVInlineAsmReg , RiscVInlineAsmRegClass } ;
167
+ pub use spirv:: { SpirVInlineAsmReg , SpirVInlineAsmRegClass } ;
166
168
pub use x86:: { X86InlineAsmReg , X86InlineAsmRegClass } ;
167
169
168
170
#[ derive( Copy , Clone , Encodable , Decodable , Debug , Eq , PartialEq , Hash ) ]
@@ -177,6 +179,7 @@ pub enum InlineAsmArch {
177
179
Hexagon ,
178
180
Mips ,
179
181
Mips64 ,
182
+ SpirV ,
180
183
}
181
184
182
185
impl FromStr for InlineAsmArch {
@@ -194,6 +197,7 @@ impl FromStr for InlineAsmArch {
194
197
"hexagon" => Ok ( Self :: Hexagon ) ,
195
198
"mips" => Ok ( Self :: Mips ) ,
196
199
"mips64" => Ok ( Self :: Mips64 ) ,
200
+ "spirv" => Ok ( Self :: SpirV ) ,
197
201
_ => Err ( ( ) ) ,
198
202
}
199
203
}
@@ -208,6 +212,7 @@ pub enum InlineAsmReg {
208
212
Nvptx ( NvptxInlineAsmReg ) ,
209
213
Hexagon ( HexagonInlineAsmReg ) ,
210
214
Mips ( MipsInlineAsmReg ) ,
215
+ SpirV ( SpirVInlineAsmReg ) ,
211
216
}
212
217
213
218
impl InlineAsmReg {
@@ -264,6 +269,9 @@ impl InlineAsmReg {
264
269
InlineAsmArch :: Mips | InlineAsmArch :: Mips64 => {
265
270
Self :: Mips ( MipsInlineAsmReg :: parse ( arch, has_feature, target, & name) ?)
266
271
}
272
+ InlineAsmArch :: SpirV => {
273
+ Self :: SpirV ( SpirVInlineAsmReg :: parse ( arch, has_feature, target, & name) ?)
274
+ }
267
275
} )
268
276
}
269
277
@@ -306,6 +314,7 @@ pub enum InlineAsmRegClass {
306
314
Nvptx ( NvptxInlineAsmRegClass ) ,
307
315
Hexagon ( HexagonInlineAsmRegClass ) ,
308
316
Mips ( MipsInlineAsmRegClass ) ,
317
+ SpirV ( SpirVInlineAsmRegClass ) ,
309
318
}
310
319
311
320
impl InlineAsmRegClass {
@@ -318,6 +327,7 @@ impl InlineAsmRegClass {
318
327
Self :: Nvptx ( r) => r. name ( ) ,
319
328
Self :: Hexagon ( r) => r. name ( ) ,
320
329
Self :: Mips ( r) => r. name ( ) ,
330
+ Self :: SpirV ( r) => r. name ( ) ,
321
331
}
322
332
}
323
333
@@ -333,6 +343,7 @@ impl InlineAsmRegClass {
333
343
Self :: Nvptx ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Nvptx ) ,
334
344
Self :: Hexagon ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Hexagon ) ,
335
345
Self :: Mips ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Mips ) ,
346
+ Self :: SpirV ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: SpirV ) ,
336
347
}
337
348
}
338
349
@@ -355,6 +366,7 @@ impl InlineAsmRegClass {
355
366
Self :: Nvptx ( r) => r. suggest_modifier ( arch, ty) ,
356
367
Self :: Hexagon ( r) => r. suggest_modifier ( arch, ty) ,
357
368
Self :: Mips ( r) => r. suggest_modifier ( arch, ty) ,
369
+ Self :: SpirV ( r) => r. suggest_modifier ( arch, ty) ,
358
370
}
359
371
}
360
372
@@ -373,6 +385,7 @@ impl InlineAsmRegClass {
373
385
Self :: Nvptx ( r) => r. default_modifier ( arch) ,
374
386
Self :: Hexagon ( r) => r. default_modifier ( arch) ,
375
387
Self :: Mips ( r) => r. default_modifier ( arch) ,
388
+ Self :: SpirV ( r) => r. default_modifier ( arch) ,
376
389
}
377
390
}
378
391
@@ -390,6 +403,7 @@ impl InlineAsmRegClass {
390
403
Self :: Nvptx ( r) => r. supported_types ( arch) ,
391
404
Self :: Hexagon ( r) => r. supported_types ( arch) ,
392
405
Self :: Mips ( r) => r. supported_types ( arch) ,
406
+ Self :: SpirV ( r) => r. supported_types ( arch) ,
393
407
}
394
408
}
395
409
@@ -414,6 +428,7 @@ impl InlineAsmRegClass {
414
428
InlineAsmArch :: Mips | InlineAsmArch :: Mips64 => {
415
429
Self :: Mips ( MipsInlineAsmRegClass :: parse ( arch, name) ?)
416
430
}
431
+ InlineAsmArch :: SpirV => Self :: SpirV ( SpirVInlineAsmRegClass :: parse ( arch, name) ?) ,
417
432
} )
418
433
} )
419
434
}
@@ -429,6 +444,7 @@ impl InlineAsmRegClass {
429
444
Self :: Nvptx ( r) => r. valid_modifiers ( arch) ,
430
445
Self :: Hexagon ( r) => r. valid_modifiers ( arch) ,
431
446
Self :: Mips ( r) => r. valid_modifiers ( arch) ,
447
+ Self :: SpirV ( r) => r. valid_modifiers ( arch) ,
432
448
}
433
449
}
434
450
}
@@ -571,5 +587,10 @@ pub fn allocatable_registers(
571
587
mips:: fill_reg_map ( arch, has_feature, target, & mut map) ;
572
588
map
573
589
}
590
+ InlineAsmArch :: SpirV => {
591
+ let mut map = spirv:: regclass_map ( ) ;
592
+ spirv:: fill_reg_map ( arch, has_feature, target, & mut map) ;
593
+ map
594
+ }
574
595
}
575
596
}
0 commit comments