Fix field length of JIP for one-offset-branch in Gen6
authorHomer Hsing <homer.xing@intel.com>
Thu, 20 Sep 2012 05:09:15 +0000 (13:09 +0800)
committerDamien Lespiau <damien.lespiau@intel.com>
Mon, 4 Mar 2013 15:54:33 +0000 (15:54 +0000)
Such JIP has 25 bits length in Gen6.

assembler/src/brw_structs.h
assembler/src/main.c

index 9a0c805..b60f8b7 100644 (file)
@@ -1311,7 +1311,10 @@ struct brw_instruction
       {
         GLint JIP:16; /* bspec: both the JIP and UIP are signed 16-bit numbers */
         GLint UIP:16;
-      } branch; /* for branch instructions: brc, brd, if, else, endif, while, break, cont, call, ret, halt, ... */
+      } branch_2_offset; /* for Gen6, Gen7 2-offsets branch instructions */
+
+      GLint JIP; /* for Gen6, Gen7 1-offset branch instructions 
+                    Gen6 uses low 25 bits. Gen7 uses low 16 bits. */
 
       struct {
         GLuint function:4;
index edba5c3..f534112 100644 (file)
@@ -351,12 +351,12 @@ int main(int argc, char **argv)
                                entry1->inst_offset - entry->inst_offset;
                            int delta = (entry->instruction.header.opcode == BRW_OPCODE_JMPI ? 1 : 0);
                             if (gen_level >= 5)
-                                    entry->instruction.bits3.branch.JIP = 2 * (offset - delta); // bspec: the jump distance in number of eight-byte units
+                                    entry->instruction.bits3.JIP = 2 * (offset - delta); // bspec: the jump distance in number of eight-byte units
                             else
-                                    entry->instruction.bits3.branch.JIP = offset - delta;
+                                    entry->instruction.bits3.JIP = offset - delta;
 
                             if (entry->instruction.header.opcode == BRW_OPCODE_ELSE)
-                                    entry->instruction.bits3.branch.UIP = 1;
+                                    entry->instruction.bits3.branch_2_offset.UIP = 1;
                            found = 1;
                            break;
                        }