diff options
author | Tom Stellard <[email protected]> | 2010-06-08 00:16:38 -0700 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2010-06-11 22:06:59 +0200 |
commit | f7269cf26a966daf555b12bffc08d862dc34528d (patch) | |
tree | f0f808ff480015c01dce0cae4c1035b86547a53d /src | |
parent | 0125f5270b1603e046630ed769c40438a9a8e4a6 (diff) |
r300/compiler: Handle SGT and SLE at the beginning of loops.
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/dri/r300/compiler/radeon_emulate_loops.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_emulate_loops.c b/src/mesa/drivers/dri/r300/compiler/radeon_emulate_loops.c index 28b9684e82d..7e1ab5e55ad 100644 --- a/src/mesa/drivers/dri/r300/compiler/radeon_emulate_loops.c +++ b/src/mesa/drivers/dri/r300/compiler/radeon_emulate_loops.c @@ -297,10 +297,12 @@ static int transform_const_loop(struct emulate_loop_state * s, /* Remove the first 4 instructions inside the loop, which are part * of the conditional and no longer needed. */ - /* SLT/SGE */ + /* SLT/SGE/SGT/SLE */ if(loop->BeginLoop->Next->U.I.Opcode != RC_OPCODE_SLT && - loop->BeginLoop->Next->U.I.Opcode != RC_OPCODE_SGE){ - rc_error(s->C,"Unexpected instruction, expected SLT/SGE\n"); + loop->BeginLoop->Next->U.I.Opcode != RC_OPCODE_SGE && + loop->BeginLoop->Next->U.I.Opcode != RC_OPCODE_SGT && + loop->BeginLoop->Next->U.I.Opcode != RC_OPCODE_SLE){ + rc_error(s->C,"Unexpected instruction, expected LT,GT,LE,GE\n"); return 0; } /* IF */ @@ -364,6 +366,12 @@ static struct rc_instruction * transform_loop(struct emulate_loop_state * s, case RC_OPCODE_SLT: ptr->U.I.Opcode = RC_OPCODE_SGE; break; + case RC_OPCODE_SLE: + ptr->U.I.Opcode = RC_OPCODE_SGT; + break; + case RC_OPCODE_SGT: + ptr->U.I.Opcode = RC_OPCODE_SLE; + break; default: rc_error(s->C, "Loop does not start with a conditional instruction."); |