@@ -154,6 +154,7 @@ mod arm;
154
154
mod hexagon;
155
155
mod mips;
156
156
mod nvptx;
157
+ mod powerpc;
157
158
mod riscv;
158
159
mod spirv;
159
160
mod wasm;
@@ -164,6 +165,7 @@ pub use arm::{ArmInlineAsmReg, ArmInlineAsmRegClass};
164
165
pub use hexagon:: { HexagonInlineAsmReg , HexagonInlineAsmRegClass } ;
165
166
pub use mips:: { MipsInlineAsmReg , MipsInlineAsmRegClass } ;
166
167
pub use nvptx:: { NvptxInlineAsmReg , NvptxInlineAsmRegClass } ;
168
+ pub use powerpc:: { PowerPCInlineAsmReg , PowerPCInlineAsmRegClass } ;
167
169
pub use riscv:: { RiscVInlineAsmReg , RiscVInlineAsmRegClass } ;
168
170
pub use spirv:: { SpirVInlineAsmReg , SpirVInlineAsmRegClass } ;
169
171
pub use wasm:: { WasmInlineAsmReg , WasmInlineAsmRegClass } ;
@@ -181,6 +183,7 @@ pub enum InlineAsmArch {
181
183
Hexagon ,
182
184
Mips ,
183
185
Mips64 ,
186
+ PowerPC ,
184
187
SpirV ,
185
188
Wasm32 ,
186
189
}
@@ -197,6 +200,7 @@ impl FromStr for InlineAsmArch {
197
200
"riscv32" => Ok ( Self :: RiscV32 ) ,
198
201
"riscv64" => Ok ( Self :: RiscV64 ) ,
199
202
"nvptx64" => Ok ( Self :: Nvptx64 ) ,
203
+ "powerpc" => Ok ( Self :: PowerPC ) ,
200
204
"hexagon" => Ok ( Self :: Hexagon ) ,
201
205
"mips" => Ok ( Self :: Mips ) ,
202
206
"mips64" => Ok ( Self :: Mips64 ) ,
@@ -225,6 +229,7 @@ pub enum InlineAsmReg {
225
229
AArch64 ( AArch64InlineAsmReg ) ,
226
230
RiscV ( RiscVInlineAsmReg ) ,
227
231
Nvptx ( NvptxInlineAsmReg ) ,
232
+ PowerPC ( PowerPCInlineAsmReg ) ,
228
233
Hexagon ( HexagonInlineAsmReg ) ,
229
234
Mips ( MipsInlineAsmReg ) ,
230
235
SpirV ( SpirVInlineAsmReg ) ,
@@ -240,6 +245,7 @@ impl InlineAsmReg {
240
245
Self :: Arm ( r) => r. name ( ) ,
241
246
Self :: AArch64 ( r) => r. name ( ) ,
242
247
Self :: RiscV ( r) => r. name ( ) ,
248
+ Self :: PowerPC ( r) => r. name ( ) ,
243
249
Self :: Hexagon ( r) => r. name ( ) ,
244
250
Self :: Mips ( r) => r. name ( ) ,
245
251
Self :: Err => "<reg>" ,
@@ -252,6 +258,7 @@ impl InlineAsmReg {
252
258
Self :: Arm ( r) => InlineAsmRegClass :: Arm ( r. reg_class ( ) ) ,
253
259
Self :: AArch64 ( r) => InlineAsmRegClass :: AArch64 ( r. reg_class ( ) ) ,
254
260
Self :: RiscV ( r) => InlineAsmRegClass :: RiscV ( r. reg_class ( ) ) ,
261
+ Self :: PowerPC ( r) => InlineAsmRegClass :: PowerPC ( r. reg_class ( ) ) ,
255
262
Self :: Hexagon ( r) => InlineAsmRegClass :: Hexagon ( r. reg_class ( ) ) ,
256
263
Self :: Mips ( r) => InlineAsmRegClass :: Mips ( r. reg_class ( ) ) ,
257
264
Self :: Err => InlineAsmRegClass :: Err ,
@@ -283,6 +290,9 @@ impl InlineAsmReg {
283
290
InlineAsmArch :: Nvptx64 => {
284
291
Self :: Nvptx ( NvptxInlineAsmReg :: parse ( arch, has_feature, target, & name) ?)
285
292
}
293
+ InlineAsmArch :: PowerPC => {
294
+ Self :: PowerPC ( PowerPCInlineAsmReg :: parse ( arch, has_feature, target, & name) ?)
295
+ }
286
296
InlineAsmArch :: Hexagon => {
287
297
Self :: Hexagon ( HexagonInlineAsmReg :: parse ( arch, has_feature, target, & name) ?)
288
298
}
@@ -311,6 +321,7 @@ impl InlineAsmReg {
311
321
Self :: Arm ( r) => r. emit ( out, arch, modifier) ,
312
322
Self :: AArch64 ( r) => r. emit ( out, arch, modifier) ,
313
323
Self :: RiscV ( r) => r. emit ( out, arch, modifier) ,
324
+ Self :: PowerPC ( r) => r. emit ( out, arch, modifier) ,
314
325
Self :: Hexagon ( r) => r. emit ( out, arch, modifier) ,
315
326
Self :: Mips ( r) => r. emit ( out, arch, modifier) ,
316
327
Self :: Err => unreachable ! ( "Use of InlineAsmReg::Err" ) ,
@@ -323,6 +334,7 @@ impl InlineAsmReg {
323
334
Self :: Arm ( r) => r. overlapping_regs ( |r| cb ( Self :: Arm ( r) ) ) ,
324
335
Self :: AArch64 ( _) => cb ( self ) ,
325
336
Self :: RiscV ( _) => cb ( self ) ,
337
+ Self :: PowerPC ( _) => cb ( self ) ,
326
338
Self :: Hexagon ( r) => r. overlapping_regs ( |r| cb ( Self :: Hexagon ( r) ) ) ,
327
339
Self :: Mips ( _) => cb ( self ) ,
328
340
Self :: Err => unreachable ! ( "Use of InlineAsmReg::Err" ) ,
@@ -348,6 +360,7 @@ pub enum InlineAsmRegClass {
348
360
AArch64 ( AArch64InlineAsmRegClass ) ,
349
361
RiscV ( RiscVInlineAsmRegClass ) ,
350
362
Nvptx ( NvptxInlineAsmRegClass ) ,
363
+ PowerPC ( PowerPCInlineAsmRegClass ) ,
351
364
Hexagon ( HexagonInlineAsmRegClass ) ,
352
365
Mips ( MipsInlineAsmRegClass ) ,
353
366
SpirV ( SpirVInlineAsmRegClass ) ,
@@ -364,6 +377,7 @@ impl InlineAsmRegClass {
364
377
Self :: AArch64 ( r) => r. name ( ) ,
365
378
Self :: RiscV ( r) => r. name ( ) ,
366
379
Self :: Nvptx ( r) => r. name ( ) ,
380
+ Self :: PowerPC ( r) => r. name ( ) ,
367
381
Self :: Hexagon ( r) => r. name ( ) ,
368
382
Self :: Mips ( r) => r. name ( ) ,
369
383
Self :: SpirV ( r) => r. name ( ) ,
@@ -382,6 +396,7 @@ impl InlineAsmRegClass {
382
396
Self :: AArch64 ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: AArch64 ) ,
383
397
Self :: RiscV ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: RiscV ) ,
384
398
Self :: Nvptx ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Nvptx ) ,
399
+ Self :: PowerPC ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: PowerPC ) ,
385
400
Self :: Hexagon ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Hexagon ) ,
386
401
Self :: Mips ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Mips ) ,
387
402
Self :: SpirV ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: SpirV ) ,
@@ -407,6 +422,7 @@ impl InlineAsmRegClass {
407
422
Self :: AArch64 ( r) => r. suggest_modifier ( arch, ty) ,
408
423
Self :: RiscV ( r) => r. suggest_modifier ( arch, ty) ,
409
424
Self :: Nvptx ( r) => r. suggest_modifier ( arch, ty) ,
425
+ Self :: PowerPC ( r) => r. suggest_modifier ( arch, ty) ,
410
426
Self :: Hexagon ( r) => r. suggest_modifier ( arch, ty) ,
411
427
Self :: Mips ( r) => r. suggest_modifier ( arch, ty) ,
412
428
Self :: SpirV ( r) => r. suggest_modifier ( arch, ty) ,
@@ -428,6 +444,7 @@ impl InlineAsmRegClass {
428
444
Self :: AArch64 ( r) => r. default_modifier ( arch) ,
429
445
Self :: RiscV ( r) => r. default_modifier ( arch) ,
430
446
Self :: Nvptx ( r) => r. default_modifier ( arch) ,
447
+ Self :: PowerPC ( r) => r. default_modifier ( arch) ,
431
448
Self :: Hexagon ( r) => r. default_modifier ( arch) ,
432
449
Self :: Mips ( r) => r. default_modifier ( arch) ,
433
450
Self :: SpirV ( r) => r. default_modifier ( arch) ,
@@ -448,6 +465,7 @@ impl InlineAsmRegClass {
448
465
Self :: AArch64 ( r) => r. supported_types ( arch) ,
449
466
Self :: RiscV ( r) => r. supported_types ( arch) ,
450
467
Self :: Nvptx ( r) => r. supported_types ( arch) ,
468
+ Self :: PowerPC ( r) => r. supported_types ( arch) ,
451
469
Self :: Hexagon ( r) => r. supported_types ( arch) ,
452
470
Self :: Mips ( r) => r. supported_types ( arch) ,
453
471
Self :: SpirV ( r) => r. supported_types ( arch) ,
@@ -467,6 +485,7 @@ impl InlineAsmRegClass {
467
485
Self :: RiscV ( RiscVInlineAsmRegClass :: parse ( arch, name) ?)
468
486
}
469
487
InlineAsmArch :: Nvptx64 => Self :: Nvptx ( NvptxInlineAsmRegClass :: parse ( arch, name) ?) ,
488
+ InlineAsmArch :: PowerPC => Self :: PowerPC ( PowerPCInlineAsmRegClass :: parse ( arch, name) ?) ,
470
489
InlineAsmArch :: Hexagon => Self :: Hexagon ( HexagonInlineAsmRegClass :: parse ( arch, name) ?) ,
471
490
InlineAsmArch :: Mips | InlineAsmArch :: Mips64 => {
472
491
Self :: Mips ( MipsInlineAsmRegClass :: parse ( arch, name) ?)
@@ -485,6 +504,7 @@ impl InlineAsmRegClass {
485
504
Self :: AArch64 ( r) => r. valid_modifiers ( arch) ,
486
505
Self :: RiscV ( r) => r. valid_modifiers ( arch) ,
487
506
Self :: Nvptx ( r) => r. valid_modifiers ( arch) ,
507
+ Self :: PowerPC ( r) => r. valid_modifiers ( arch) ,
488
508
Self :: Hexagon ( r) => r. valid_modifiers ( arch) ,
489
509
Self :: Mips ( r) => r. valid_modifiers ( arch) ,
490
510
Self :: SpirV ( r) => r. valid_modifiers ( arch) ,
@@ -633,6 +653,11 @@ pub fn allocatable_registers(
633
653
nvptx:: fill_reg_map ( arch, has_feature, target, & mut map) ;
634
654
map
635
655
}
656
+ InlineAsmArch :: PowerPC => {
657
+ let mut map = powerpc:: regclass_map ( ) ;
658
+ powerpc:: fill_reg_map ( arch, has_feature, target, & mut map) ;
659
+ map
660
+ }
636
661
InlineAsmArch :: Hexagon => {
637
662
let mut map = hexagon:: regclass_map ( ) ;
638
663
hexagon:: fill_reg_map ( arch, has_feature, target, & mut map) ;
0 commit comments