From: danno@chromium.org Date: Fri, 19 Oct 2012 10:44:56 +0000 (+0000) Subject: Fix ARM dissambler test problems with movw/movt. X-Git-Tag: upstream/4.7.83~15814 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ace5bf3f940883e58840ffb74627854db45f5dd0;p=platform%2Fupstream%2Fv8.git Fix ARM dissambler test problems with movw/movt. R=ulan@chromium.org Review URL: https://codereview.chromium.org/11198061 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12771 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/arm/assembler-arm.cc b/src/arm/assembler-arm.cc index 0860bd2..9be62a4 100644 --- a/src/arm/assembler-arm.cc +++ b/src/arm/assembler-arm.cc @@ -900,13 +900,17 @@ void Assembler::addrmod1(Instr instr, if ((instr & ~kCondMask) == 13*B21) { // mov, S not set move_32_bit_immediate(cond, rd, LeaveCC, x); } else { - // If this is not a mov or mvn instruction we may still be able to avoid - // a constant pool entry by using mvn or movw. - if (!x.must_output_reloc_info(this) && - (instr & kMovMvnMask) != kMovMvnPattern) { - mov(ip, x, LeaveCC, cond); - } else { + if ((instr & kMovMvnMask) == kMovMvnPattern) { + // Moves need to use a constant pool entry. + RecordRelocInfo(x.rmode_, x.imm32_, USE_CONSTANT_POOL); + ldr(ip, MemOperand(pc, 0), cond); + } else if (x.must_output_reloc_info(this)) { + // Otherwise, use most efficient form of fetching from constant pool. move_32_bit_immediate(cond, ip, LeaveCC, x); + } else { + // If this is not a mov or mvn instruction we may still be able to + // avoid a constant pool entry by using mvn or movw. + mov(ip, x, LeaveCC, cond); } addrmod1(instr, rn, rd, Operand(ip)); }