Skip to content

Commit d4ec9eb

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

File tree

1 file changed

+15
-40
lines changed

1 file changed

+15
-40
lines changed

src/Interpreter/concolic_interpreter.cpp

Lines changed: 15 additions & 40 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));
@@ -705,53 +705,28 @@ bool ConcolicInterpreter::i_instr_binary_f32(Module *m, uint8_t opcode) {
705705
std::optional<z3::expr> c;
706706
m->sp -= 1;
707707
switch (opcode) {
708-
case 0x7c:
708+
case 0x92:
709709
c = a + b;
710710
break; // f32.add
711-
case 0x7d:
711+
case 0x93:
712712
c = a - b;
713713
break; // f32.sub
714-
case 0x7e:
714+
case 0x94:
715715
c = a * b;
716716
break; // f32.mul
717-
case 0x7f:
717+
case 0x95:
718718
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:
719+
break; // f32.div
720+
case 0x96:
721+
c = z3::min(a, b);
722+
break; // f32.min
723+
case 0x97:
724+
c = z3::max(a, b);
725+
break; // f32.max
726+
case 0x98:
752727
// TODO: Symbolic semantics
753728
assert(false);
754-
break; // f32.rotr
729+
break; // f32.copysign
755730
default:
756731
return false;
757732
}

0 commit comments

Comments
 (0)