etnaviv: Support opcodes with bit 6 set in assembler
authorWladimir J. van der Laan <laanwj@gmail.com>
Sun, 1 Oct 2017 09:21:19 +0000 (11:21 +0200)
committerChristian Gmeiner <christian.gmeiner@gmail.com>
Tue, 3 Oct 2017 17:49:38 +0000 (19:49 +0200)
Support opcodes with bit 6 set in assembler, and assert that only ops
0x00..0x7f are used.

Signed-off-by: Wladimir J. van der Laan <laanwj@gmail.com>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
src/gallium/drivers/etnaviv/etnaviv_asm.c

index 7d6270ca1f9960efc26ba5eec6e2ad68b85b6483..8ef4dc9f7191b68d28a7222f3e00bb4fa97dac18 100644 (file)
@@ -68,7 +68,9 @@ etna_assemble(uint32_t *out, const struct etna_inst *inst)
    if (!check_uniforms(inst))
       BUG("error: generating instruction that accesses two different uniforms");
 
-   out[0] = VIV_ISA_WORD_0_OPCODE(inst->opcode) |
+   assert(!(inst->opcode&~0x7f));
+
+   out[0] = VIV_ISA_WORD_0_OPCODE(inst->opcode & 0x3f) |
             VIV_ISA_WORD_0_COND(inst->cond) |
             COND(inst->sat, VIV_ISA_WORD_0_SAT) |
             COND(inst->dst.use, VIV_ISA_WORD_0_DST_USE) |
@@ -88,6 +90,7 @@ etna_assemble(uint32_t *out, const struct etna_inst *inst)
             VIV_ISA_WORD_2_SRC0_RGROUP(inst->src[0].rgroup) |
             COND(inst->src[1].use, VIV_ISA_WORD_2_SRC1_USE) |
             VIV_ISA_WORD_2_SRC1_REG(inst->src[1].reg) |
+            COND(inst->opcode & 0x40, VIV_ISA_WORD_2_OPCODE_BIT6) |
             VIV_ISA_WORD_2_SRC1_SWIZ(inst->src[1].swiz) |
             COND(inst->src[1].neg, VIV_ISA_WORD_2_SRC1_NEG) |
             COND(inst->src[1].abs, VIV_ISA_WORD_2_SRC1_ABS) |