diff --git a/assembler/src/brw_structs.h b/assembler/src/brw_structs.h index cd81e783..d93c39f3 100644 --- a/assembler/src/brw_structs.h +++ b/assembler/src/brw_structs.h @@ -1319,7 +1319,7 @@ struct brw_instruction GLint UIP:16; } branch_2_offset; /* for Gen6, Gen7 2-offsets branch; for Gen7 1-offset branch */ - GLint JIP; /* used by Gen6 CALL instructions */ + GLint JIP; /* used by Gen6 CALL instructions; Gen7 JMPI */ struct { GLuint function:4; diff --git a/assembler/src/main.c b/assembler/src/main.c index b897ad4b..ba411a55 100644 --- a/assembler/src/main.c +++ b/assembler/src/main.c @@ -430,8 +430,16 @@ int main(int argc, char **argv) entry->instruction.bits3.JIP = offset; // for CALL, JMPI else entry->instruction.bits1.branch.JIP = offset; // for CASE,ELSE,FORK,IF,WHILE - } else if(gen_level >= 7) - entry->instruction.bits3.branch_2_offset.JIP = offset; + } else if(gen_level >= 7) { + int opcode = entry->instruction.header.opcode; + /* Gen7 JMPI Restrictions in bspec: + * The JIP data type must be Signed DWord + */ + if(opcode == BRW_OPCODE_JMPI) + entry->instruction.bits3.JIP = offset; + else + entry->instruction.bits3.branch_2_offset.JIP = offset; + } } }