Skip to content

Commit 83f113a

Browse files
committed
Fix i_instr_binary_f32 using the wrong opcodes
1 parent fbb5262 commit 83f113a

File tree

1 file changed

+15
-41
lines changed

1 file changed

+15
-41
lines changed

src/Interpreter/concolic_interpreter.cpp

Lines changed: 15 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -434,10 +434,10 @@ bool ConcolicInterpreter::i_instr_math_f32(Module *m, uint8_t opcode) {
434434
m->sp -= 1;
435435
switch (opcode) {
436436
case 0x5b:
437-
c = z3::ite(z3::fp_eq(a, b), m->ctx.bv_val(1, 32), m->ctx.bv_val(0, 32));
437+
c = z3::ite(a == b, m->ctx.bv_val(1, 32), m->ctx.bv_val(0, 32));
438438
break; // f32.eq
439439
case 0x5c:
440-
c = z3::ite(!z3::fp_eq(a, b), m->ctx.bv_val(1, 32), m->ctx.bv_val(0, 32));
440+
c = z3::ite(a != b, m->ctx.bv_val(1, 32), m->ctx.bv_val(0, 32));
441441
break; // f32.ne
442442
case 0x5d:
443443
c = z3::ite(a < b, m->ctx.bv_val(1, 32), m->ctx.bv_val(0, 32));
@@ -695,7 +695,6 @@ bool ConcolicInterpreter::i_instr_binary_i64(Module *m, uint8_t opcode) {
695695
}
696696

697697
bool ConcolicInterpreter::i_instr_binary_f32(Module *m, uint8_t opcode) {
698-
// TODO: Maybe reduce duplication since this is the same as i32?
699698
int original_sp = m->sp;
700699
Interpreter::i_instr_binary_i64(m, opcode);
701700
m->sp = original_sp;
@@ -705,53 +704,28 @@ bool ConcolicInterpreter::i_instr_binary_f32(Module *m, uint8_t opcode) {
705704
std::optional<z3::expr> c;
706705
m->sp -= 1;
707706
switch (opcode) {
708-
case 0x7c:
707+
case 0x92:
709708
c = a + b;
710709
break; // f32.add
711-
case 0x7d:
710+
case 0x93:
712711
c = a - b;
713712
break; // f32.sub
714-
case 0x7e:
713+
case 0x94:
715714
c = a * b;
716715
break; // f32.mul
717-
case 0x7f:
716+
case 0x95:
718717
c = a / b;
719-
break; // f32.div_s
720-
case 0x80:
721-
c = z3::udiv(a, b);
722-
break; // f32.div_u
723-
case 0x81:
724-
c = z3::srem(a, b);
725-
break; // f32.rem_s
726-
case 0x82:
727-
c = z3::urem(a, b);
728-
break; // f32.rem_u
729-
case 0x83:
730-
c = a & b;
731-
break; // f32.and
732-
case 0x84:
733-
c = a | b;
734-
break; // f32.or
735-
case 0x85:
736-
c = a ^ b;
737-
break; // f32.xor
738-
case 0x86:
739-
c = z3::shl(a, b);
740-
break; // f32.shl
741-
case 0x87:
742-
c = z3::ashr(a, b);
743-
break; // f32.shr_s
744-
case 0x88:
745-
c = z3::lshr(a, b);
746-
break; // f32.shr_u
747-
case 0x89:
748-
// TODO: Symbolic semantics
749-
c = z3::shl(a, b) | z3::lshr(a, 32 - b);
750-
break; // f32.rotl
751-
case 0x8a:
718+
break; // f32.div
719+
case 0x96:
720+
c = z3::min(a, b);
721+
break; // f32.min
722+
case 0x97:
723+
c = z3::max(a, b);
724+
break; // f32.max
725+
case 0x98:
752726
// TODO: Symbolic semantics
753727
assert(false);
754-
break; // f32.rotr
728+
break; // f32.copysign
755729
default:
756730
return false;
757731
}

0 commit comments

Comments
 (0)