diff options
author | Rob Clark <robdclark@gmail.com> | 2015-04-18 14:05:28 -0400 |
---|---|---|
committer | Rob Clark <robdclark@gmail.com> | 2015-04-18 14:05:28 -0400 |
commit | 849000b08d60273221594c0c82843cc8f8767941 (patch) | |
tree | ca582b77560ef16fdf487f905fb48998ca6ab22d | |
parent | 0ab745edfc9e06aa67db13dcddba2ec24839cc83 (diff) |
ir3emu: add some more instructions
-rw-r--r-- | ir3emu.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -505,9 +505,21 @@ emu_run_cat2(struct ir3_emu_ctx *ctx, instr_cat2_t *cat2) case OPC_MIN_F: dst.f = fminf(src1.f, src2.f); break; + case OPC_MIN_U: + dst.u = min(src1.u, src2.u); + break; + case OPC_MIN_S: + dst.i = min(src1.i, src2.i); + break; case OPC_MAX_F: dst.f = fmaxf(src1.f, src2.f); break; + case OPC_MAX_U: + dst.u = max(src1.u, src2.u); + break; + case OPC_MAX_S: + dst.i = max(src1.i, src2.i); + break; case OPC_MUL_F: dst.f = src1.f * src2.f; break; @@ -566,6 +578,9 @@ emu_run_cat2(struct ir3_emu_ctx *ctx, instr_cat2_t *cat2) case OPC_TRUNC_F: dst.f = truncf(src1.f); break; + case OPC_RNDNE_F: + dst.f = round(src1.f); + break; case OPC_ADD_U: dst.u = src1.u + src2.u; break; @@ -596,6 +611,9 @@ emu_run_cat2(struct ir3_emu_ctx *ctx, instr_cat2_t *cat2) case OPC_SHR_B: dst.u = src1.u >> src2.u; break; + case OPC_ASHR_B: + dst.i = src1.i >> src2.i; + break; case OPC_BARY_F: dst.i = (src1.i + 1) * (src2.i + 1); /* bary.f seems to read r0.xy */ @@ -772,6 +790,7 @@ emu_run_cat5(struct ir3_emu_ctx *ctx, instr_cat5_t *cat5) case OPC_SAML: case OPC_DSX: case OPC_DSY: + case OPC_GETSIZE: break; default: emu_fatal(ctx, "unhandled cat5 opc: %u", cat5->opc); |