From ee321884221942e3dbe91d46d293e0115620fbfc Mon Sep 17 00:00:00 2001 From: Homer Hsing Date: Fri, 19 Oct 2012 11:18:23 +0800 Subject: [PATCH] Fix Gen7 JMPI compilation Gen7 JMPI Restrictions in bspec: The JIP data type must be Signed DWord --- assembler/src/brw_structs.h | 2 +- assembler/src/main.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) 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; + } } }