before we change it, disassembler output:
(+f0) cmp.l(8)      null g12<8,8,1>D g2.2<0,1,0>D { align1 };

this is wrong.
even the command is "cmp.l.f1.1", disassembler still output "cmp.l"

after we change it, it is correct:
(+f0) cmp.l.f1.1(8) null g12<8,8,1>D g2.2<0,1,0>D { align1 };
---
 src/disasm.c |   14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/disasm.c b/src/disasm.c
index e52e3d3..0a4e935 100644
--- a/src/disasm.c
+++ b/src/disasm.c
@@ -384,6 +384,13 @@ static int pad (FILE *f, int c)
     return 0;
 }
 
+static int flag_reg (FILE *file, const int flag_nr, const int flag_subreg_nr)
+{
+    if (flag_nr || flag_subreg_nr)
+        return format (file, ".f%d.%d", flag_nr, flag_subreg_nr);
+    return 0;
+}
+
 static int control (FILE *file, char *name, char *ctrl[], GLuint id, int 
*space)
 {
     if (!ctrl[id]) {
@@ -796,9 +803,14 @@ int disasm (FILE *file, struct brw_instruction *inst)
     err |= control (file, "debug control", debug_ctrl, 
inst->header.debug_control, NULL);
 
     if (inst->header.opcode != BRW_OPCODE_SEND &&
-       inst->header.opcode != BRW_OPCODE_SENDC)
+       inst->header.opcode != BRW_OPCODE_SENDC) {
        err |= control (file, "conditional modifier", conditional_modifier,
                        inst->header.sfid_destreg__conditionalmod, NULL);
+       if (inst->header.sfid_destreg__conditionalmod)
+           err |= flag_reg (file,
+                            inst->bits2.da1.flag_reg_nr,
+                            inst->bits2.da1.flag_subreg_nr);
+    }
 
     if (inst->header.opcode != BRW_OPCODE_NOP) {
        string (file, "(");
-- 
1.7.10.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to