From 99eccf0a52c794914840cf10a43eec7f6b54f36a Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Wed, 1 Apr 2015 10:10:11 -0400 Subject: ir3emu: some fixes --- ir3emu.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/ir3emu.c b/ir3emu.c index f7983c9..2319714 100644 --- a/ir3emu.c +++ b/ir3emu.c @@ -264,12 +264,12 @@ static regval_t read_src(struct ir3_emu_ctx *ctx, int n, struct ir3_regsrc rs) } } - if (rs.neg) - r.f = -r.f; - if (rs.abs) r.f = fabs(r.f); + if (rs.neg) + r.f = -r.f; + if (ctx->verbose) printf(" src%d: %08x %f\n", n, r.u, r.f); @@ -517,6 +517,18 @@ emu_run_cat2(struct ir3_emu_ctx *ctx, instr_cat2_t *cat2) emu_fatal(ctx, "unhandled cat2 cond: %u", cat2->cond); } break; + case OPC_CMPS_S: + switch (cat2->cond) { + case 0: dst.u = (src1.i < src2.i) ? 1 : 0; break; + case 1: dst.u = (src1.i <= src2.i) ? 1 : 0; break; + case 2: dst.u = (src1.i > src2.i) ? 1 : 0; break; + case 3: dst.u = (src1.i >= src2.i) ? 1 : 0; break; + case 4: dst.u = (src1.i == src2.i) ? 1 : 0; break; + case 5: dst.u = (src1.i != src2.i) ? 1 : 0; break; + default: + emu_fatal(ctx, "unhandled cat2 cond: %u", cat2->cond); + } + break; case OPC_ABSNEG_F: case OPC_ABSNEG_S: /* seems to basically just be a type of mov which can do @@ -548,11 +560,12 @@ emu_run_cat2(struct ir3_emu_ctx *ctx, instr_cat2_t *cat2) case OPC_OR_B: dst.u = src1.u | src2.u; break; - //case OPC_NOT_B: + case OPC_NOT_B: + dst.u = ~src1.u; + break; case OPC_XOR_B: dst.u = src1.u ^ src2.u; break; - break; case OPC_SHL_B: dst.u = src1.u << src2.u; break; -- cgit v1.2.3