Skip to content

Commit cbe3fc3

Browse files
committed
add signed mul and div instrs
1 parent 2021a44 commit cbe3fc3

File tree

4 files changed

+30
-0
lines changed

4 files changed

+30
-0
lines changed

impl.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,30 @@ DEF(modi) {
113113
vmnext;
114114
}
115115

116+
DEF(muls) {
117+
rgA = (rvm_i64)rgB * (rvm_i64)rgC;
118+
vmnext;
119+
}
120+
121+
DEF(mulsi) {
122+
rgA = (rvm_i64)rgB * (rvm_i64)imm15s;
123+
vmnext;
124+
}
125+
126+
DEF(divs) {
127+
if (rgC == 0) {
128+
vmbrk -RVM_EDIVZ;
129+
}
130+
rgA = (rvm_i64)rgB / (rvm_i64)rgC;
131+
vmnext;
132+
}
133+
134+
DEF(divsi) {
135+
if (imm15u == 0) {
136+
vmbrk -RVM_EDIVZ;
137+
}
138+
rgA = (rvm_i64)rgB / (rvm_i64)imm15s;
139+
vmnext;
140+
}
141+
116142
#endif /* impl.h */

opcodes.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,9 @@ DEF(div, 19) /* [R] rgA = rgB / rgC */
4141
DEF(divi, 20) /* [I] rgA = rgB / zxt(func15) */
4242
DEF(mod, 21) /* [R] rgA = rgB % rgC */
4343
DEF(modi, 22) /* [I] rgA = rgB % zxt(func15) */
44+
DEF(muls, 23) /* [R] rgA = s(rgB) * s(rgC) */
45+
DEF(mulsi, 24) /* [I] rgA = s(rgB) * sxt(func15) */
46+
DEF(divs, 25) /* [R] rgA = s(rgB) / s(rgC) */
47+
DEF(divsi, 26) /* [I] rgA = s(rgB) / sxt(func15) */
4448

4549
#endif /* opcodes.h */

test/div_neg10_5

8 Bytes
Binary file not shown.

test/divs_neg10_5

8 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)