@@ -154,6 +154,7 @@ mod arm;
154154mod hexagon;
155155mod mips;
156156mod nvptx;
157+ mod powerpc;
157158mod riscv;
158159mod spirv;
159160mod wasm;
@@ -164,6 +165,7 @@ pub use arm::{ArmInlineAsmReg, ArmInlineAsmRegClass};
164165pub use hexagon:: { HexagonInlineAsmReg , HexagonInlineAsmRegClass } ;
165166pub use mips:: { MipsInlineAsmReg , MipsInlineAsmRegClass } ;
166167pub use nvptx:: { NvptxInlineAsmReg , NvptxInlineAsmRegClass } ;
168+ pub use powerpc:: { PowerPCInlineAsmReg , PowerPCInlineAsmRegClass } ;
167169pub use riscv:: { RiscVInlineAsmReg , RiscVInlineAsmRegClass } ;
168170pub use spirv:: { SpirVInlineAsmReg , SpirVInlineAsmRegClass } ;
169171pub use wasm:: { WasmInlineAsmReg , WasmInlineAsmRegClass } ;
@@ -181,6 +183,7 @@ pub enum InlineAsmArch {
181183 Hexagon ,
182184 Mips ,
183185 Mips64 ,
186+ PowerPC ,
184187 SpirV ,
185188 Wasm32 ,
186189}
@@ -197,6 +200,7 @@ impl FromStr for InlineAsmArch {
197200 "riscv32" => Ok ( Self :: RiscV32 ) ,
198201 "riscv64" => Ok ( Self :: RiscV64 ) ,
199202 "nvptx64" => Ok ( Self :: Nvptx64 ) ,
203+ "powerpc" => Ok ( Self :: PowerPC ) ,
200204 "hexagon" => Ok ( Self :: Hexagon ) ,
201205 "mips" => Ok ( Self :: Mips ) ,
202206 "mips64" => Ok ( Self :: Mips64 ) ,
@@ -225,6 +229,7 @@ pub enum InlineAsmReg {
225229 AArch64 ( AArch64InlineAsmReg ) ,
226230 RiscV ( RiscVInlineAsmReg ) ,
227231 Nvptx ( NvptxInlineAsmReg ) ,
232+ PowerPC ( PowerPCInlineAsmReg ) ,
228233 Hexagon ( HexagonInlineAsmReg ) ,
229234 Mips ( MipsInlineAsmReg ) ,
230235 SpirV ( SpirVInlineAsmReg ) ,
@@ -240,6 +245,7 @@ impl InlineAsmReg {
240245 Self :: Arm ( r) => r. name ( ) ,
241246 Self :: AArch64 ( r) => r. name ( ) ,
242247 Self :: RiscV ( r) => r. name ( ) ,
248+ Self :: PowerPC ( r) => r. name ( ) ,
243249 Self :: Hexagon ( r) => r. name ( ) ,
244250 Self :: Mips ( r) => r. name ( ) ,
245251 Self :: Err => "<reg>" ,
@@ -252,6 +258,7 @@ impl InlineAsmReg {
252258 Self :: Arm ( r) => InlineAsmRegClass :: Arm ( r. reg_class ( ) ) ,
253259 Self :: AArch64 ( r) => InlineAsmRegClass :: AArch64 ( r. reg_class ( ) ) ,
254260 Self :: RiscV ( r) => InlineAsmRegClass :: RiscV ( r. reg_class ( ) ) ,
261+ Self :: PowerPC ( r) => InlineAsmRegClass :: PowerPC ( r. reg_class ( ) ) ,
255262 Self :: Hexagon ( r) => InlineAsmRegClass :: Hexagon ( r. reg_class ( ) ) ,
256263 Self :: Mips ( r) => InlineAsmRegClass :: Mips ( r. reg_class ( ) ) ,
257264 Self :: Err => InlineAsmRegClass :: Err ,
@@ -283,6 +290,9 @@ impl InlineAsmReg {
283290 InlineAsmArch :: Nvptx64 => {
284291 Self :: Nvptx ( NvptxInlineAsmReg :: parse ( arch, has_feature, target, & name) ?)
285292 }
293+ InlineAsmArch :: PowerPC => {
294+ Self :: PowerPC ( PowerPCInlineAsmReg :: parse ( arch, has_feature, target, & name) ?)
295+ }
286296 InlineAsmArch :: Hexagon => {
287297 Self :: Hexagon ( HexagonInlineAsmReg :: parse ( arch, has_feature, target, & name) ?)
288298 }
@@ -311,6 +321,7 @@ impl InlineAsmReg {
311321 Self :: Arm ( r) => r. emit ( out, arch, modifier) ,
312322 Self :: AArch64 ( r) => r. emit ( out, arch, modifier) ,
313323 Self :: RiscV ( r) => r. emit ( out, arch, modifier) ,
324+ Self :: PowerPC ( r) => r. emit ( out, arch, modifier) ,
314325 Self :: Hexagon ( r) => r. emit ( out, arch, modifier) ,
315326 Self :: Mips ( r) => r. emit ( out, arch, modifier) ,
316327 Self :: Err => unreachable ! ( "Use of InlineAsmReg::Err" ) ,
@@ -323,6 +334,7 @@ impl InlineAsmReg {
323334 Self :: Arm ( r) => r. overlapping_regs ( |r| cb ( Self :: Arm ( r) ) ) ,
324335 Self :: AArch64 ( _) => cb ( self ) ,
325336 Self :: RiscV ( _) => cb ( self ) ,
337+ Self :: PowerPC ( _) => cb ( self ) ,
326338 Self :: Hexagon ( r) => r. overlapping_regs ( |r| cb ( Self :: Hexagon ( r) ) ) ,
327339 Self :: Mips ( _) => cb ( self ) ,
328340 Self :: Err => unreachable ! ( "Use of InlineAsmReg::Err" ) ,
@@ -348,6 +360,7 @@ pub enum InlineAsmRegClass {
348360 AArch64 ( AArch64InlineAsmRegClass ) ,
349361 RiscV ( RiscVInlineAsmRegClass ) ,
350362 Nvptx ( NvptxInlineAsmRegClass ) ,
363+ PowerPC ( PowerPCInlineAsmRegClass ) ,
351364 Hexagon ( HexagonInlineAsmRegClass ) ,
352365 Mips ( MipsInlineAsmRegClass ) ,
353366 SpirV ( SpirVInlineAsmRegClass ) ,
@@ -364,6 +377,7 @@ impl InlineAsmRegClass {
364377 Self :: AArch64 ( r) => r. name ( ) ,
365378 Self :: RiscV ( r) => r. name ( ) ,
366379 Self :: Nvptx ( r) => r. name ( ) ,
380+ Self :: PowerPC ( r) => r. name ( ) ,
367381 Self :: Hexagon ( r) => r. name ( ) ,
368382 Self :: Mips ( r) => r. name ( ) ,
369383 Self :: SpirV ( r) => r. name ( ) ,
@@ -382,6 +396,7 @@ impl InlineAsmRegClass {
382396 Self :: AArch64 ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: AArch64 ) ,
383397 Self :: RiscV ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: RiscV ) ,
384398 Self :: Nvptx ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Nvptx ) ,
399+ Self :: PowerPC ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: PowerPC ) ,
385400 Self :: Hexagon ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Hexagon ) ,
386401 Self :: Mips ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Mips ) ,
387402 Self :: SpirV ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: SpirV ) ,
@@ -407,6 +422,7 @@ impl InlineAsmRegClass {
407422 Self :: AArch64 ( r) => r. suggest_modifier ( arch, ty) ,
408423 Self :: RiscV ( r) => r. suggest_modifier ( arch, ty) ,
409424 Self :: Nvptx ( r) => r. suggest_modifier ( arch, ty) ,
425+ Self :: PowerPC ( r) => r. suggest_modifier ( arch, ty) ,
410426 Self :: Hexagon ( r) => r. suggest_modifier ( arch, ty) ,
411427 Self :: Mips ( r) => r. suggest_modifier ( arch, ty) ,
412428 Self :: SpirV ( r) => r. suggest_modifier ( arch, ty) ,
@@ -428,6 +444,7 @@ impl InlineAsmRegClass {
428444 Self :: AArch64 ( r) => r. default_modifier ( arch) ,
429445 Self :: RiscV ( r) => r. default_modifier ( arch) ,
430446 Self :: Nvptx ( r) => r. default_modifier ( arch) ,
447+ Self :: PowerPC ( r) => r. default_modifier ( arch) ,
431448 Self :: Hexagon ( r) => r. default_modifier ( arch) ,
432449 Self :: Mips ( r) => r. default_modifier ( arch) ,
433450 Self :: SpirV ( r) => r. default_modifier ( arch) ,
@@ -448,6 +465,7 @@ impl InlineAsmRegClass {
448465 Self :: AArch64 ( r) => r. supported_types ( arch) ,
449466 Self :: RiscV ( r) => r. supported_types ( arch) ,
450467 Self :: Nvptx ( r) => r. supported_types ( arch) ,
468+ Self :: PowerPC ( r) => r. supported_types ( arch) ,
451469 Self :: Hexagon ( r) => r. supported_types ( arch) ,
452470 Self :: Mips ( r) => r. supported_types ( arch) ,
453471 Self :: SpirV ( r) => r. supported_types ( arch) ,
@@ -467,6 +485,7 @@ impl InlineAsmRegClass {
467485 Self :: RiscV ( RiscVInlineAsmRegClass :: parse ( arch, name) ?)
468486 }
469487 InlineAsmArch :: Nvptx64 => Self :: Nvptx ( NvptxInlineAsmRegClass :: parse ( arch, name) ?) ,
488+ InlineAsmArch :: PowerPC => Self :: PowerPC ( PowerPCInlineAsmRegClass :: parse ( arch, name) ?) ,
470489 InlineAsmArch :: Hexagon => Self :: Hexagon ( HexagonInlineAsmRegClass :: parse ( arch, name) ?) ,
471490 InlineAsmArch :: Mips | InlineAsmArch :: Mips64 => {
472491 Self :: Mips ( MipsInlineAsmRegClass :: parse ( arch, name) ?)
@@ -485,6 +504,7 @@ impl InlineAsmRegClass {
485504 Self :: AArch64 ( r) => r. valid_modifiers ( arch) ,
486505 Self :: RiscV ( r) => r. valid_modifiers ( arch) ,
487506 Self :: Nvptx ( r) => r. valid_modifiers ( arch) ,
507+ Self :: PowerPC ( r) => r. valid_modifiers ( arch) ,
488508 Self :: Hexagon ( r) => r. valid_modifiers ( arch) ,
489509 Self :: Mips ( r) => r. valid_modifiers ( arch) ,
490510 Self :: SpirV ( r) => r. valid_modifiers ( arch) ,
@@ -633,6 +653,11 @@ pub fn allocatable_registers(
633653 nvptx:: fill_reg_map ( arch, has_feature, target, & mut map) ;
634654 map
635655 }
656+ InlineAsmArch :: PowerPC => {
657+ let mut map = powerpc:: regclass_map ( ) ;
658+ powerpc:: fill_reg_map ( arch, has_feature, target, & mut map) ;
659+ map
660+ }
636661 InlineAsmArch :: Hexagon => {
637662 let mut map = hexagon:: regclass_map ( ) ;
638663 hexagon:: fill_reg_map ( arch, has_feature, target, & mut map) ;
0 commit comments