Add unsigned integer multiply instructions.
HEADmain1 files changed, 21 insertions, 0 deletions
|
diff --git a/insts.rb b/insts.rb index d24a31d..c667896 100644 --- a/ insts.rb+++ b/ insts.rb |
| @@ -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 } |
|