diff options
author | Homer Hsing <homer.xing@intel.com> | 2012-09-24 16:39:36 +0800 |
---|---|---|
committer | Xiang, Haihao <haihao.xiang@intel.com> | 2012-09-28 04:06:00 -0400 |
commit | f6fbfc762dfdde347afd382fcc372ba447351f21 (patch) | |
tree | 8688df81ea910452d1f92ba347d5e5cb74d12d7e | |
parent | 679e7a31fb3b14cbeb7636d63055af76397156f3 (diff) |
Fix reloc_target_offset computing logic
-rw-r--r-- | src/main.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -402,18 +402,18 @@ int main(int argc, char **argv) struct brw_instruction *inst = & entry->instruction; if (inst->first_reloc_target) - inst->first_reloc_offset = label_to_addr(inst->first_reloc_target, entry->inst_offset); + inst->first_reloc_offset = label_to_addr(inst->first_reloc_target, entry->inst_offset) - entry->inst_offset; if (inst->second_reloc_target) - inst->second_reloc_offset = label_to_addr(inst->second_reloc_target, entry->inst_offset); + inst->second_reloc_offset = label_to_addr(inst->second_reloc_target, entry->inst_offset) - entry->inst_offset; if (inst->second_reloc_offset) { // this is a branch instruction with two offset arguments - entry->instruction.bits3.branch_2_offset.JIP = jump_distance(inst->first_reloc_offset - entry->inst_offset); - entry->instruction.bits3.branch_2_offset.UIP = jump_distance(inst->second_reloc_offset - entry->inst_offset); + entry->instruction.bits3.branch_2_offset.JIP = jump_distance(inst->first_reloc_offset); + entry->instruction.bits3.branch_2_offset.UIP = jump_distance(inst->second_reloc_offset); } else if (inst->first_reloc_offset) { // this is a branch instruction with one offset argument - int offset = inst->first_reloc_offset - entry->inst_offset; + int offset = inst->first_reloc_offset; /* bspec: Unlike other flow control instructions, the offset used by JMPI is relative to the incremented instruction pointer rather than the IP value for the instruction itself. */ if(entry->instruction.header.opcode == BRW_OPCODE_JMPI) offset --; |