Skip to content

Commit 3e9bcfb

Browse files
authored
Merge pull request #100 from crisdut/fix/cnv
Fix cnv macro (and improviment asm_macro)
2 parents a2157ca + 98e1b4c commit 3e9bcfb

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

src/isa/bytecode.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,13 @@ impl Bytecode for MoveOp {
515515
writer.write_u5(idx2)?;
516516
writer.write_u3(reg)?;
517517
}
518-
MoveOp::CpyA(sreg, sidx, dreg, didx) | MoveOp::CnvA(sreg, sidx, dreg, didx) => {
518+
MoveOp::CpyA(sreg, sidx, dreg, didx) => {
519+
writer.write_u3(sreg)?;
520+
writer.write_u5(sidx)?;
521+
writer.write_u3(dreg)?;
522+
writer.write_u5(didx)?;
523+
}
524+
MoveOp::CnvA(sreg, sidx, dreg, didx) => {
519525
writer.write_u3(sreg)?;
520526
writer.write_u5(sidx)?;
521527
writer.write_u3(dreg)?;

src/isa/macros.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,12 @@ macro_rules! aluasm_inner {
118118
$code.push($crate::instr!{ $op . $flag $( $arg [ $idx ] ),+ });
119119
$crate::aluasm_inner! { $code => $( $tt )* }
120120
};
121-
{ $code:ident => $op:ident $arglit:literal, $arg:ident [ $idx:literal ] ; $($tt:tt)* } => {
122-
$code.push($crate::instr!{ $op $arglit, $arg [ $idx ] });
121+
{ $code:ident => $op:ident $arglit:literal, $( $arg:ident [ $idx:literal ] ),+ ; $($tt:tt)* } => {
122+
$code.push($crate::instr!{ $op $arglit, $( $arg [ $idx ] ),+ });
123123
$crate::aluasm_inner! { $code => $( $tt )* }
124124
};
125-
{ $code:ident => $op:ident . $flag:ident $arglit:literal, $arg:ident [ $idx:literal ] ; $($tt:tt)* } => {
126-
$code.push($crate::instr!{ $op . $flag $arglit, $arg [ $idx ] });
125+
{ $code:ident => $op:ident . $flag:ident $arglit:literal, $( $arg:ident [ $idx:literal ] ),+ ; $($tt:tt)* } => {
126+
$code.push($crate::instr!{ $op . $flag $arglit, $( $arg [ $idx ] ),+ });
127127
$crate::aluasm_inner! { $code => $( $tt )* }
128128
};
129129
{ $code:ident => $op:ident $arglit1:literal, $arglit2:literal, $arg:ident [ $idx:literal ] ; $($tt:tt)* } => {
@@ -323,13 +323,13 @@ macro_rules! instr {
323323
(RegBlockAFR::A, RegBlockAFR::A) => Instr::Move(MoveOp::CnvA(
324324
$crate::_reg_tya!(Reg, $src_reg),
325325
$crate::_reg_idx!($src_idx),
326-
$crate::_reg_tya!(Reg, $src_reg),
326+
$crate::_reg_tya!(Reg, $dst_reg),
327327
$crate::_reg_idx!($dst_idx),
328328
)),
329329
(RegBlockAFR::F, RegBlockAFR::F) => Instr::Move(MoveOp::CnvF(
330330
$crate::_reg_tyf!(Reg, $src_reg),
331331
$crate::_reg_idx!($src_idx),
332-
$crate::_reg_tyf!(Reg, $src_reg),
332+
$crate::_reg_tyf!(Reg, $dst_reg),
333333
$crate::_reg_idx!($dst_idx),
334334
)),
335335
(_, _) => panic!("Conversion operation between unsupported register types"),

0 commit comments

Comments
 (0)