@@ -109,11 +109,11 @@ pub(crate) enum VirtualOp {
109
109
RET ( VirtualRegister ) ,
110
110
111
111
/* Memory Instructions */
112
- ALOC ( VirtualRegister ) ,
113
- CFEI ( VirtualImmediate24 ) ,
114
- CFSI ( VirtualImmediate24 ) ,
115
- CFE ( VirtualRegister ) ,
116
- CFS ( VirtualRegister ) ,
112
+ ALOC ( VirtualRegister , VirtualRegister ) ,
113
+ CFEI ( VirtualRegister , VirtualImmediate24 ) ,
114
+ CFSI ( VirtualRegister , VirtualImmediate24 ) ,
115
+ CFE ( VirtualRegister , VirtualRegister ) ,
116
+ CFS ( VirtualRegister , VirtualRegister ) ,
117
117
LB ( VirtualRegister , VirtualRegister , VirtualImmediate12 ) ,
118
118
LW ( VirtualRegister , VirtualRegister , VirtualImmediate12 ) ,
119
119
MCL ( VirtualRegister , VirtualRegister ) ,
@@ -290,11 +290,11 @@ impl VirtualOp {
290
290
RET ( r1) => vec ! [ r1] ,
291
291
292
292
/* Memory Instructions */
293
- ALOC ( r1) => vec ! [ r1] ,
294
- CFEI ( _imm) => vec ! [ ] ,
295
- CFSI ( _imm) => vec ! [ ] ,
296
- CFE ( r1) => vec ! [ r1] ,
297
- CFS ( r1) => vec ! [ r1] ,
293
+ ALOC ( hp , r1) => vec ! [ hp , r1] ,
294
+ CFEI ( sp , _imm) => vec ! [ sp ] ,
295
+ CFSI ( sp , _imm) => vec ! [ sp ] ,
296
+ CFE ( sp , r1) => vec ! [ sp , r1] ,
297
+ CFS ( sp , r1) => vec ! [ sp , r1] ,
298
298
LB ( r1, r2, _i) => vec ! [ r1, r2] ,
299
299
LW ( r1, r2, _i) => vec ! [ r1, r2] ,
300
300
MCL ( r1, r2) => vec ! [ r1, r2] ,
@@ -425,11 +425,11 @@ impl VirtualOp {
425
425
| JNEI ( _, _, _)
426
426
| JNZI ( _, _)
427
427
| RET ( _)
428
- | ALOC ( _ )
429
- | CFEI ( _ )
430
- | CFSI ( _ )
431
- | CFE ( _ )
432
- | CFS ( _ )
428
+ | ALOC ( .. )
429
+ | CFEI ( .. )
430
+ | CFSI ( .. )
431
+ | CFE ( .. )
432
+ | CFS ( .. )
433
433
| MCL ( _, _)
434
434
| MCLI ( _, _)
435
435
| MCP ( _, _, _)
@@ -522,17 +522,17 @@ impl VirtualOp {
522
522
| ED19 ( _, _, _, _)
523
523
=> vec ! [ & VirtualRegister :: Constant ( Overflow ) , & VirtualRegister :: Constant ( Error ) ] ,
524
524
FLAG ( _) => vec ! [ & VirtualRegister :: Constant ( Flags ) ] ,
525
+ | ALOC ( hp, _) => vec ! [ hp] ,
526
+ | CFEI ( sp, _)
527
+ | CFSI ( sp, _)
528
+ | CFE ( sp, _)
529
+ | CFS ( sp, _) => vec ! [ sp] ,
525
530
JMP ( _)
526
531
| JI ( _)
527
532
| JNE ( _, _, _)
528
533
| JNEI ( _, _, _)
529
534
| JNZI ( _, _)
530
535
| RET ( _)
531
- | ALOC ( _)
532
- | CFEI ( _)
533
- | CFSI ( _)
534
- | CFE ( _)
535
- | CFS ( _)
536
536
| LB ( _, _, _)
537
537
| LW ( _, _, _)
538
538
| MCL ( _, _)
@@ -638,11 +638,11 @@ impl VirtualOp {
638
638
RET ( r1) => vec ! [ r1] ,
639
639
640
640
/* Memory Instructions */
641
- ALOC ( r1) => vec ! [ r1] ,
642
- CFEI ( _imm) => vec ! [ ] ,
643
- CFSI ( _imm) => vec ! [ ] ,
644
- CFE ( r1) => vec ! [ r1] ,
645
- CFS ( r1) => vec ! [ r1] ,
641
+ ALOC ( hp , r1) => vec ! [ hp , r1] ,
642
+ CFEI ( sp , _imm) => vec ! [ sp ] ,
643
+ CFSI ( sp , _imm) => vec ! [ sp ] ,
644
+ CFE ( sp , r1) => vec ! [ sp , r1] ,
645
+ CFS ( sp , r1) => vec ! [ sp , r1] ,
646
646
LB ( _r1, r2, _i) => vec ! [ r2] ,
647
647
LW ( _r1, r2, _i) => vec ! [ r2] ,
648
648
MCL ( r1, r2) => vec ! [ r1, r2] ,
@@ -760,11 +760,11 @@ impl VirtualOp {
760
760
RET ( _r1) => vec ! [ ] ,
761
761
762
762
/* Memory Instructions */
763
- ALOC ( _r1) => vec ! [ ] ,
764
- CFEI ( _imm) => vec ! [ ] ,
765
- CFSI ( _imm) => vec ! [ ] ,
766
- CFE ( _r1) => vec ! [ ] ,
767
- CFS ( _r1) => vec ! [ ] ,
763
+ ALOC ( hp , _r1) => vec ! [ hp ] ,
764
+ CFEI ( sp , _imm) => vec ! [ sp ] ,
765
+ CFSI ( sp , _imm) => vec ! [ sp ] ,
766
+ CFE ( sp , _r1) => vec ! [ sp ] ,
767
+ CFS ( sp , _r1) => vec ! [ sp ] ,
768
768
LB ( r1, _r2, _i) => vec ! [ r1] ,
769
769
LW ( r1, _r2, _i) => vec ! [ r1] ,
770
770
MCL ( _r1, _r2) => vec ! [ ] ,
@@ -1060,11 +1060,11 @@ impl VirtualOp {
1060
1060
RET ( r1) => Self :: RET ( update_reg ( reg_to_reg_map, r1) ) ,
1061
1061
1062
1062
/* Memory Instructions */
1063
- ALOC ( r1) => Self :: ALOC ( update_reg ( reg_to_reg_map, r1) ) ,
1064
- CFEI ( i) => Self :: CFEI ( i. clone ( ) ) ,
1065
- CFSI ( i) => Self :: CFSI ( i. clone ( ) ) ,
1066
- CFE ( r1) => Self :: CFE ( update_reg ( reg_to_reg_map, r1) ) ,
1067
- CFS ( r1) => Self :: CFS ( update_reg ( reg_to_reg_map, r1) ) ,
1063
+ ALOC ( hp , r1) => Self :: ALOC ( hp . clone ( ) , update_reg ( reg_to_reg_map, r1) ) ,
1064
+ CFEI ( sp , i) => Self :: CFEI ( sp . clone ( ) , i. clone ( ) ) ,
1065
+ CFSI ( sp , i) => Self :: CFSI ( sp . clone ( ) , i. clone ( ) ) ,
1066
+ CFE ( sp , r1) => Self :: CFE ( sp . clone ( ) , update_reg ( reg_to_reg_map, r1) ) ,
1067
+ CFS ( sp , r1) => Self :: CFS ( sp . clone ( ) , update_reg ( reg_to_reg_map, r1) ) ,
1068
1068
LB ( r1, r2, i) => Self :: LB (
1069
1069
update_reg ( reg_to_reg_map, r1) ,
1070
1070
update_reg ( reg_to_reg_map, r2) ,
@@ -1550,11 +1550,11 @@ impl VirtualOp {
1550
1550
RET ( reg) => AllocatedOpcode :: RET ( map_reg ( & mapping, reg) ) ,
1551
1551
1552
1552
/* Memory Instructions */
1553
- ALOC ( reg) => AllocatedOpcode :: ALOC ( map_reg ( & mapping, reg) ) ,
1554
- CFEI ( imm) => AllocatedOpcode :: CFEI ( imm. clone ( ) ) ,
1555
- CFSI ( imm) => AllocatedOpcode :: CFSI ( imm. clone ( ) ) ,
1556
- CFE ( reg) => AllocatedOpcode :: CFE ( map_reg ( & mapping, reg) ) ,
1557
- CFS ( reg) => AllocatedOpcode :: CFS ( map_reg ( & mapping, reg) ) ,
1553
+ ALOC ( _hp , reg) => AllocatedOpcode :: ALOC ( map_reg ( & mapping, reg) ) ,
1554
+ CFEI ( _sp , imm) => AllocatedOpcode :: CFEI ( imm. clone ( ) ) ,
1555
+ CFSI ( _sp , imm) => AllocatedOpcode :: CFSI ( imm. clone ( ) ) ,
1556
+ CFE ( _sp , reg) => AllocatedOpcode :: CFE ( map_reg ( & mapping, reg) ) ,
1557
+ CFS ( _sp , reg) => AllocatedOpcode :: CFS ( map_reg ( & mapping, reg) ) ,
1558
1558
LB ( reg1, reg2, imm) => AllocatedOpcode :: LB (
1559
1559
map_reg ( & mapping, reg1) ,
1560
1560
map_reg ( & mapping, reg2) ,
@@ -1775,6 +1775,7 @@ fn update_reg(
1775
1775
reg : & VirtualRegister ,
1776
1776
) -> VirtualRegister {
1777
1777
if let Some ( r) = reg_to_reg_map. get ( reg) {
1778
+ assert ! ( reg. is_virtual( ) , "Only virtual registers should be updated" ) ;
1778
1779
( * r) . into ( )
1779
1780
} else {
1780
1781
reg. clone ( )
0 commit comments