diff options
| -rw-r--r-- | insts.rb | 21 |
1 files changed, 21 insertions, 0 deletions
| @@ -169,6 +169,27 @@ inst "rshiftsign $ $" do | |||
| 169 | uop { @decode.outaddr_a; @alu.outdata; @rf.store } | 169 | uop { @decode.outaddr_a; @alu.outdata; @rf.store } |
| 170 | end | 170 | end |
| 171 | 171 | ||
| 172 | inst "mul $ #" do | ||
| 173 | uop { @alu.xor; constaddr(0); @control.outdata } | ||
| 174 | uop { @decode.outdata_b; @counter.load; @control.set_uip_if_zero; constaddr(uip()+4) } | ||
| 175 | uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata } | ||
| 176 | mulloop = uip() | ||
| 177 | uop { @counter.decrement; @alu.outdata; @tmp0.outaddr; @alu.add } | ||
| 178 | uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(mulloop) } | ||
| 179 | uop { @decode.outaddr_a; @alu.outdata; @rf.store } | ||
| 180 | end | ||
| 181 | |||
| 182 | inst "mul $ $" do | ||
| 183 | uop { @alu.xor; constaddr(0); @control.outdata } | ||
| 184 | uop { @decode.outaddr_a; @rf.outdata; @counter.load } | ||
| 185 | uop { @counter.outdata; @control.set_uip_if_zero; constaddr(uip()+4) } | ||
| 186 | uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata } | ||
| 187 | mulloop = uip() | ||
| 188 | uop { @counter.decrement; @alu.outdata; @tmp0.outaddr; @alu.add } | ||
| 189 | uop { @counter.outdata; @control.set_uip_if_nonzero; constaddr(mulloop) } | ||
| 190 | uop { @decode.outaddr_a; @alu.outdata; @rf.store } | ||
| 191 | end | ||
| 192 | |||
| 172 | def cmpbit(name, bit) | 193 | def cmpbit(name, bit) |
| 173 | inst "#{name} $ #" do | 194 | inst "#{name} $ #" do |
| 174 | uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata } | 195 | uop { @decode.outaddr_a; @rf.outdata; @tmp0.loaddata } |
