summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/freedreno
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2014-04-09 09:01:32 -0400
committerRob Clark <[email protected]>2014-04-09 10:59:18 -0400
commit9604e31dc9b43529a17b823b9cb9ddb7492bb317 (patch)
tree10d574c338db8ba8abb98498fee609f6eaf7c3c1 /src/gallium/drivers/freedreno
parent4d641803e8f8763dcf4a262c6bcf2d1ba0431ca2 (diff)
freedreno/a3xx/compiler: fix neg mov's
create_mov() was fixed up to handle neg/abs properly for interal mov's, using absneg.f, but forgot to fix it for TGSI MOV's. The problem with using add.f to handle negated mov's is that we can only take a single const reg src. So: MOV TEMP[n], -CONST[m] would turn into: add.f Rdst, (neg)CONST[m], 0.0 which would not work. Anyways, just remove the extra code and always use create_mov() which DTRT. This fixes piglit vs-op-neg-int test. Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium/drivers/freedreno')
-rw-r--r--src/gallium/drivers/freedreno/a3xx/fd3_compiler.c21
1 files changed, 1 insertions, 20 deletions
diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_compiler.c b/src/gallium/drivers/freedreno/a3xx/fd3_compiler.c
index 911330cde2a..ad518b0b5e9 100644
--- a/src/gallium/drivers/freedreno/a3xx/fd3_compiler.c
+++ b/src/gallium/drivers/freedreno/a3xx/fd3_compiler.c
@@ -1599,26 +1599,7 @@ instr_cat1(const struct instr_translater *t,
{
struct tgsi_dst_register *dst = get_dst(ctx, inst);
struct tgsi_src_register *src = &inst->Src[0].Register;
-
- /* mov instructions can't handle a negate on src: */
- if (src->Negate) {
- struct tgsi_src_register constval;
- struct ir3_instruction *instr;
-
- /* since right now, we are using uniformly either TYPE_F16 or
- * TYPE_F32, and we don't utilize the conversion possibilities
- * of mov instructions, we can get away with substituting an
- * add.f which can handle negate. Might need to revisit this
- * in the future if we start supporting widening/narrowing or
- * conversion to/from integer..
- */
- instr = instr_create(ctx, 2, OPC_ADD_F);
- get_immediate(ctx, &constval, fui(0.0));
- vectorize(ctx, instr, dst, 2, src, 0, &constval, 0);
- } else {
- create_mov(ctx, dst, src);
- /* create_mov() generates vector sequence, so no vectorize() */
- }
+ create_mov(ctx, dst, src);
put_dst(ctx, inst, dst);
}