@@ -168,6 +168,7 @@ mod arm;
168168mod avr;
169169mod bpf;
170170mod hexagon;
171+ mod loongarch;
171172mod m68k;
172173mod mips;
173174mod msp430;
@@ -184,6 +185,7 @@ pub use arm::{ArmInlineAsmReg, ArmInlineAsmRegClass};
184185pub use avr:: { AvrInlineAsmReg , AvrInlineAsmRegClass } ;
185186pub use bpf:: { BpfInlineAsmReg , BpfInlineAsmRegClass } ;
186187pub use hexagon:: { HexagonInlineAsmReg , HexagonInlineAsmRegClass } ;
188+ pub use loongarch:: { LoongArchInlineAsmReg , LoongArchInlineAsmRegClass } ;
187189pub use m68k:: { M68kInlineAsmReg , M68kInlineAsmRegClass } ;
188190pub use mips:: { MipsInlineAsmReg , MipsInlineAsmRegClass } ;
189191pub use msp430:: { Msp430InlineAsmReg , Msp430InlineAsmRegClass } ;
@@ -205,6 +207,7 @@ pub enum InlineAsmArch {
205207 RiscV64 ,
206208 Nvptx64 ,
207209 Hexagon ,
210+ LoongArch64 ,
208211 Mips ,
209212 Mips64 ,
210213 PowerPC ,
@@ -234,6 +237,7 @@ impl FromStr for InlineAsmArch {
234237 "powerpc" => Ok ( Self :: PowerPC ) ,
235238 "powerpc64" => Ok ( Self :: PowerPC64 ) ,
236239 "hexagon" => Ok ( Self :: Hexagon ) ,
240+ "loongarch64" => Ok ( Self :: LoongArch64 ) ,
237241 "mips" => Ok ( Self :: Mips ) ,
238242 "mips64" => Ok ( Self :: Mips64 ) ,
239243 "s390x" => Ok ( Self :: S390x ) ,
@@ -259,6 +263,7 @@ pub enum InlineAsmReg {
259263 Nvptx ( NvptxInlineAsmReg ) ,
260264 PowerPC ( PowerPCInlineAsmReg ) ,
261265 Hexagon ( HexagonInlineAsmReg ) ,
266+ LoongArch ( LoongArchInlineAsmReg ) ,
262267 Mips ( MipsInlineAsmReg ) ,
263268 S390x ( S390xInlineAsmReg ) ,
264269 SpirV ( SpirVInlineAsmReg ) ,
@@ -280,6 +285,7 @@ impl InlineAsmReg {
280285 Self :: RiscV ( r) => r. name ( ) ,
281286 Self :: PowerPC ( r) => r. name ( ) ,
282287 Self :: Hexagon ( r) => r. name ( ) ,
288+ Self :: LoongArch ( r) => r. name ( ) ,
283289 Self :: Mips ( r) => r. name ( ) ,
284290 Self :: S390x ( r) => r. name ( ) ,
285291 Self :: Bpf ( r) => r. name ( ) ,
@@ -298,6 +304,7 @@ impl InlineAsmReg {
298304 Self :: RiscV ( r) => InlineAsmRegClass :: RiscV ( r. reg_class ( ) ) ,
299305 Self :: PowerPC ( r) => InlineAsmRegClass :: PowerPC ( r. reg_class ( ) ) ,
300306 Self :: Hexagon ( r) => InlineAsmRegClass :: Hexagon ( r. reg_class ( ) ) ,
307+ Self :: LoongArch ( r) => InlineAsmRegClass :: LoongArch ( r. reg_class ( ) ) ,
301308 Self :: Mips ( r) => InlineAsmRegClass :: Mips ( r. reg_class ( ) ) ,
302309 Self :: S390x ( r) => InlineAsmRegClass :: S390x ( r. reg_class ( ) ) ,
303310 Self :: Bpf ( r) => InlineAsmRegClass :: Bpf ( r. reg_class ( ) ) ,
@@ -324,6 +331,7 @@ impl InlineAsmReg {
324331 Self :: PowerPC ( PowerPCInlineAsmReg :: parse ( name) ?)
325332 }
326333 InlineAsmArch :: Hexagon => Self :: Hexagon ( HexagonInlineAsmReg :: parse ( name) ?) ,
334+ InlineAsmArch :: LoongArch64 => Self :: LoongArch ( LoongArchInlineAsmReg :: parse ( name) ?) ,
327335 InlineAsmArch :: Mips | InlineAsmArch :: Mips64 => {
328336 Self :: Mips ( MipsInlineAsmReg :: parse ( name) ?)
329337 }
@@ -354,6 +362,9 @@ impl InlineAsmReg {
354362 Self :: RiscV ( r) => r. validate ( arch, reloc_model, target_features, target, is_clobber) ,
355363 Self :: PowerPC ( r) => r. validate ( arch, reloc_model, target_features, target, is_clobber) ,
356364 Self :: Hexagon ( r) => r. validate ( arch, reloc_model, target_features, target, is_clobber) ,
365+ Self :: LoongArch ( r) => {
366+ r. validate ( arch, reloc_model, target_features, target, is_clobber)
367+ }
357368 Self :: Mips ( r) => r. validate ( arch, reloc_model, target_features, target, is_clobber) ,
358369 Self :: S390x ( r) => r. validate ( arch, reloc_model, target_features, target, is_clobber) ,
359370 Self :: Bpf ( r) => r. validate ( arch, reloc_model, target_features, target, is_clobber) ,
@@ -379,6 +390,7 @@ impl InlineAsmReg {
379390 Self :: RiscV ( r) => r. emit ( out, arch, modifier) ,
380391 Self :: PowerPC ( r) => r. emit ( out, arch, modifier) ,
381392 Self :: Hexagon ( r) => r. emit ( out, arch, modifier) ,
393+ Self :: LoongArch ( r) => r. emit ( out, arch, modifier) ,
382394 Self :: Mips ( r) => r. emit ( out, arch, modifier) ,
383395 Self :: S390x ( r) => r. emit ( out, arch, modifier) ,
384396 Self :: Bpf ( r) => r. emit ( out, arch, modifier) ,
@@ -397,6 +409,7 @@ impl InlineAsmReg {
397409 Self :: RiscV ( _) => cb ( self ) ,
398410 Self :: PowerPC ( r) => r. overlapping_regs ( |r| cb ( Self :: PowerPC ( r) ) ) ,
399411 Self :: Hexagon ( r) => r. overlapping_regs ( |r| cb ( Self :: Hexagon ( r) ) ) ,
412+ Self :: LoongArch ( _) => cb ( self ) ,
400413 Self :: Mips ( _) => cb ( self ) ,
401414 Self :: S390x ( _) => cb ( self ) ,
402415 Self :: Bpf ( r) => r. overlapping_regs ( |r| cb ( Self :: Bpf ( r) ) ) ,
@@ -418,6 +431,7 @@ pub enum InlineAsmRegClass {
418431 Nvptx ( NvptxInlineAsmRegClass ) ,
419432 PowerPC ( PowerPCInlineAsmRegClass ) ,
420433 Hexagon ( HexagonInlineAsmRegClass ) ,
434+ LoongArch ( LoongArchInlineAsmRegClass ) ,
421435 Mips ( MipsInlineAsmRegClass ) ,
422436 S390x ( S390xInlineAsmRegClass ) ,
423437 SpirV ( SpirVInlineAsmRegClass ) ,
@@ -440,6 +454,7 @@ impl InlineAsmRegClass {
440454 Self :: Nvptx ( r) => r. name ( ) ,
441455 Self :: PowerPC ( r) => r. name ( ) ,
442456 Self :: Hexagon ( r) => r. name ( ) ,
457+ Self :: LoongArch ( r) => r. name ( ) ,
443458 Self :: Mips ( r) => r. name ( ) ,
444459 Self :: S390x ( r) => r. name ( ) ,
445460 Self :: SpirV ( r) => r. name ( ) ,
@@ -464,6 +479,7 @@ impl InlineAsmRegClass {
464479 Self :: Nvptx ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Nvptx ) ,
465480 Self :: PowerPC ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: PowerPC ) ,
466481 Self :: Hexagon ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Hexagon ) ,
482+ Self :: LoongArch ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: LoongArch ) ,
467483 Self :: Mips ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: Mips ) ,
468484 Self :: S390x ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: S390x ) ,
469485 Self :: SpirV ( r) => r. suggest_class ( arch, ty) . map ( InlineAsmRegClass :: SpirV ) ,
@@ -495,6 +511,7 @@ impl InlineAsmRegClass {
495511 Self :: Nvptx ( r) => r. suggest_modifier ( arch, ty) ,
496512 Self :: PowerPC ( r) => r. suggest_modifier ( arch, ty) ,
497513 Self :: Hexagon ( r) => r. suggest_modifier ( arch, ty) ,
514+ Self :: LoongArch ( r) => r. suggest_modifier ( arch, ty) ,
498515 Self :: Mips ( r) => r. suggest_modifier ( arch, ty) ,
499516 Self :: S390x ( r) => r. suggest_modifier ( arch, ty) ,
500517 Self :: SpirV ( r) => r. suggest_modifier ( arch, ty) ,
@@ -522,6 +539,7 @@ impl InlineAsmRegClass {
522539 Self :: Nvptx ( r) => r. default_modifier ( arch) ,
523540 Self :: PowerPC ( r) => r. default_modifier ( arch) ,
524541 Self :: Hexagon ( r) => r. default_modifier ( arch) ,
542+ Self :: LoongArch ( r) => r. default_modifier ( arch) ,
525543 Self :: Mips ( r) => r. default_modifier ( arch) ,
526544 Self :: S390x ( r) => r. default_modifier ( arch) ,
527545 Self :: SpirV ( r) => r. default_modifier ( arch) ,
@@ -548,6 +566,7 @@ impl InlineAsmRegClass {
548566 Self :: Nvptx ( r) => r. supported_types ( arch) ,
549567 Self :: PowerPC ( r) => r. supported_types ( arch) ,
550568 Self :: Hexagon ( r) => r. supported_types ( arch) ,
569+ Self :: LoongArch ( r) => r. supported_types ( arch) ,
551570 Self :: Mips ( r) => r. supported_types ( arch) ,
552571 Self :: S390x ( r) => r. supported_types ( arch) ,
553572 Self :: SpirV ( r) => r. supported_types ( arch) ,
@@ -575,6 +594,7 @@ impl InlineAsmRegClass {
575594 Self :: PowerPC ( PowerPCInlineAsmRegClass :: parse ( name) ?)
576595 }
577596 InlineAsmArch :: Hexagon => Self :: Hexagon ( HexagonInlineAsmRegClass :: parse ( name) ?) ,
597+ InlineAsmArch :: LoongArch64 => Self :: LoongArch ( LoongArchInlineAsmRegClass :: parse ( name) ?) ,
578598 InlineAsmArch :: Mips | InlineAsmArch :: Mips64 => {
579599 Self :: Mips ( MipsInlineAsmRegClass :: parse ( name) ?)
580600 }
@@ -601,6 +621,7 @@ impl InlineAsmRegClass {
601621 Self :: Nvptx ( r) => r. valid_modifiers ( arch) ,
602622 Self :: PowerPC ( r) => r. valid_modifiers ( arch) ,
603623 Self :: Hexagon ( r) => r. valid_modifiers ( arch) ,
624+ Self :: LoongArch ( r) => r. valid_modifiers ( arch) ,
604625 Self :: Mips ( r) => r. valid_modifiers ( arch) ,
605626 Self :: S390x ( r) => r. valid_modifiers ( arch) ,
606627 Self :: SpirV ( r) => r. valid_modifiers ( arch) ,
@@ -760,6 +781,11 @@ pub fn allocatable_registers(
760781 hexagon:: fill_reg_map ( arch, reloc_model, target_features, target, & mut map) ;
761782 map
762783 }
784+ InlineAsmArch :: LoongArch64 => {
785+ let mut map = loongarch:: regclass_map ( ) ;
786+ loongarch:: fill_reg_map ( arch, reloc_model, target_features, target, & mut map) ;
787+ map
788+ }
763789 InlineAsmArch :: Mips | InlineAsmArch :: Mips64 => {
764790 let mut map = mips:: regclass_map ( ) ;
765791 mips:: fill_reg_map ( arch, reloc_model, target_features, target, & mut map) ;
0 commit comments