summaryrefslogtreecommitdiff
path: root/insts.rb
diff options
context:
space:
mode:
authorJulian Blake Kongslie2021-07-19 13:07:45 -0700
committerJulian Blake Kongslie2021-07-19 13:07:45 -0700
commit73e3b0034c7147f1232e30082d6fa283d1d453b4 (patch)
tree1599e637e7189642b2ab8ecc8aa0a074a06d9b0e /insts.rb
parentAdd counter module and simplify board design for shift instructions. (diff)
downloadbreadboarding-main.tar.xz
Add unsigned integer multiply instructions.HEADmain
Diffstat (limited to 'insts.rb')
-rw-r--r--insts.rb21
1 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 }
170end 170end
171 171
172inst "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 }
180end
181
182inst "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 }
191end
192
172def cmpbit(name, bit) 193def 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 }