@@ -75,6 +75,13 @@ pub enum RiscVInstruction {
7575 dest : RiscVRegister ,
7676 src : RiscVRegister ,
7777 } ,
78+ // Copy immediate
79+ // `mv rd, rs1` expands to `addi rd, rs, 0`
80+ #[ strum( serialize = "mvi" ) ]
81+ Mvi {
82+ dest : RiscVRegister ,
83+ imm : i32 ,
84+ } ,
7885 /// Sign extend Word
7986 ///
8087 /// psuedo instruction which translates to `addiw rd, rs, 0`
@@ -175,7 +182,11 @@ pub enum ArmInstruction {
175182 src : ArmVal ,
176183 } ,
177184 #[ strum( serialize = "mov" ) ]
178- Mov ,
185+ Mov {
186+ width : ArmWidth ,
187+ dest : ArmRegister ,
188+ src : ArmVal
189+ } ,
179190 #[ strum( serialize = "ret" ) ]
180191 Ret ,
181192 /// Str [r2 + offset] = r1
@@ -435,7 +446,9 @@ impl Into<String> for ArmInstruction {
435446 _ => todo ! ( )
436447 }
437448 } ,
438- ArmInstruction :: Mov => todo ! ( ) ,
449+ ArmInstruction :: Mov { width, dest, src } => {
450+ format ! ( "mov {}, {}" , dest, src)
451+ } ,
439452 ArmInstruction :: Ret => todo ! ( ) ,
440453 ArmInstruction :: Str { width, src, dest } => {
441454 match width {
@@ -468,7 +481,9 @@ impl Into<String> for ArmRegister {
468481 ( ArmRegisterName :: Pc , ArmWidth :: SignedHalf ) => todo ! ( ) ,
469482 ( ArmRegisterName :: Pc , ArmWidth :: Word ) => todo ! ( ) ,
470483 ( ArmRegisterName :: Pc , ArmWidth :: Double ) => todo ! ( ) ,
471- ( ArmRegisterName :: Sp , _) => "sp" ,
484+ ( ArmRegisterName :: Sp , ArmWidth :: Word ) => "wsp" ,
485+ ( ArmRegisterName :: Sp , ArmWidth :: Double ) => "sp" ,
486+ ( ArmRegisterName :: Sp , _) => todo ! ( ) ,
472487 ( ArmRegisterName :: Lr , ArmWidth :: Byte ) => todo ! ( ) ,
473488 ( ArmRegisterName :: Lr , ArmWidth :: SignedByte ) => todo ! ( ) ,
474489 ( ArmRegisterName :: Lr , ArmWidth :: Half ) => todo ! ( ) ,
@@ -479,8 +494,8 @@ impl Into<String> for ArmRegister {
479494 ( ArmRegisterName :: X0 , ArmWidth :: SignedByte ) => todo ! ( ) ,
480495 ( ArmRegisterName :: X0 , ArmWidth :: Half ) => todo ! ( ) ,
481496 ( ArmRegisterName :: X0 , ArmWidth :: SignedHalf ) => todo ! ( ) ,
482- ( ArmRegisterName :: X0 , ArmWidth :: Word ) => todo ! ( ) ,
483- ( ArmRegisterName :: X0 , ArmWidth :: Double ) => todo ! ( ) ,
497+ ( ArmRegisterName :: X0 , ArmWidth :: Word ) => "w0" ,
498+ ( ArmRegisterName :: X0 , ArmWidth :: Double ) => "x0" ,
484499 ( ArmRegisterName :: X1 , ArmWidth :: Byte ) => todo ! ( ) ,
485500 ( ArmRegisterName :: X1 , ArmWidth :: SignedByte ) => todo ! ( ) ,
486501 ( ArmRegisterName :: X1 , ArmWidth :: Half ) => todo ! ( ) ,
@@ -653,8 +668,8 @@ impl Into<String> for ArmRegister {
653668 ( ArmRegisterName :: X29 , ArmWidth :: SignedByte ) => todo ! ( ) ,
654669 ( ArmRegisterName :: X29 , ArmWidth :: Half ) => todo ! ( ) ,
655670 ( ArmRegisterName :: X29 , ArmWidth :: SignedHalf ) => todo ! ( ) ,
656- ( ArmRegisterName :: X29 , ArmWidth :: Word ) => todo ! ( ) ,
657- ( ArmRegisterName :: X29 , ArmWidth :: Double ) => todo ! ( ) ,
671+ ( ArmRegisterName :: X29 , ArmWidth :: Word ) => "w29" ,
672+ ( ArmRegisterName :: X29 , ArmWidth :: Double ) => "x29" ,
658673 } ;
659674 s. to_string ( )
660675 }
@@ -675,7 +690,11 @@ impl Display for ArmVal {
675690 ArmVal :: Reg ( arm_register) => arm_register. fmt ( f) ,
676691 ArmVal :: Imm ( x) => write ! ( f, "{}" , x) ,
677692 ArmVal :: RegOffset ( arm_register, offset) => {
678- write ! ( f, "[{}, {}]" , arm_register, offset)
693+ let double_reg = ArmRegister {
694+ name : arm_register. name ,
695+ width : ArmWidth :: Double
696+ } ;
697+ write ! ( f, "[{}, {}]" , double_reg, offset)
679698 } ,
680699 }
681700 }
0 commit comments