Skip to content

Commit f1d6eea

Browse files
committed
refactor cond-jump instrs
1 parent 48fad25 commit f1d6eea

File tree

1 file changed

+16
-40
lines changed

1 file changed

+16
-40
lines changed

impl.h

Lines changed: 16 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@
2828
__RVM_DISPATCH; \
2929
} \
3030
} while (0)
31+
#define util_jmpif(expr, pcoff) do { \
32+
if ((expr)) { \
33+
pc += (pcoff); \
34+
util_checkpc(); \
35+
} \
36+
} while (0)
3137

3238
DEF(nop) {
3339
vmnext;
@@ -249,82 +255,52 @@ DEF(loop) {
249255
}
250256

251257
DEF(je) {
252-
if (hasf(RVM_FEQ)) {
253-
pc += imm23s;
254-
util_checkpc();
255-
}
258+
util_jmpif(hasf(RVM_FEQ), imm23s);
256259
vmnext;
257260
}
258261

259262
DEF(jne) {
260-
if (!hasf(RVM_FEQ)) {
261-
pc += imm23s;
262-
util_checkpc();
263-
}
263+
util_jmpif(!hasf(RVM_FEQ), imm23s);
264264
vmnext;
265265
}
266266

267267
DEF(jg) {
268-
if (hasf(RVM_FGT)) {
269-
pc += imm23s;
270-
util_checkpc();
271-
}
268+
util_jmpif(hasf(RVM_FGT), imm23s);
272269
vmnext;
273270
}
274271

275272
DEF(ja) {
276-
if (hasf(RVM_FAB)) {
277-
pc += imm23s;
278-
util_checkpc();
279-
}
273+
util_jmpif(hasf(RVM_FAB), imm23s);
280274
vmnext;
281275
}
282276

283277
DEF(jl) {
284-
if (!hasf(RVM_FGT | RVM_FEQ)) {
285-
pc += imm23s;
286-
util_checkpc();
287-
}
278+
util_jmpif(!hasf(RVM_FGT | RVM_FEQ), imm23s);
288279
vmnext;
289280
}
290281

291282
DEF(jb) {
292-
if (!hasf(RVM_FAB | RVM_FEQ)) {
293-
pc += imm23s;
294-
util_checkpc();
295-
}
283+
util_jmpif(!hasf(RVM_FAB | RVM_FEQ), imm23s);
296284
vmnext;
297285
}
298286

299287
DEF(jge) {
300-
if (hasf(RVM_FGT) || hasf(RVM_FEQ)) {
301-
pc += imm23s;
302-
util_checkpc();
303-
}
288+
util_jmpif(hasf(RVM_FGT) || hasf(RVM_FEQ), imm23s);
304289
vmnext;
305290
}
306291

307292
DEF(jae) {
308-
if (hasf(RVM_FAB) || hasf(RVM_FEQ)) {
309-
pc += imm23s;
310-
util_checkpc();
311-
}
293+
util_jmpif(hasf(RVM_FAB) || hasf(RVM_FEQ), imm23s);
312294
vmnext;
313295
}
314296

315297
DEF(jle) {
316-
if (!hasf(RVM_FGT)) {
317-
pc += imm23s;
318-
util_checkpc();
319-
}
298+
util_jmpif(!hasf(RVM_FGT), imm23s);
320299
vmnext;
321300
}
322301

323302
DEF(jbe) {
324-
if (!hasf(RVM_FAB)) {
325-
pc += imm23s;
326-
util_checkpc();
327-
}
303+
util_jmpif(!hasf(RVM_FAB), imm23s);
328304
vmnext;
329305
}
330306

0 commit comments

Comments
 (0)