From 61f916cc4757610ce308bfdea9a00cf29afd2b02 Mon Sep 17 00:00:00 2001 From: jeffhao Date: Thu, 25 Oct 2012 17:48:51 -0700 Subject: A few more MIPS fixes. Emulator boots up with black screen. The emulator no longer reboots on startup, though the screen remains black. In this change: - Fixed compilation of kMipsDelta. - Fixed resolution trampoline to call with reg T9 so GP can be calculated properly. - Supress DescribeLocks on proxy methods to allow stack dumping (not MIPS specific). Change-Id: I66ef62002e3ffba5a253e94a5300d022f9345934 --- src/compiler/codegen/mips/Assemble.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/compiler/codegen/mips') diff --git a/src/compiler/codegen/mips/Assemble.cc b/src/compiler/codegen/mips/Assemble.cc index f19c1f1e29..9f8a68638f 100644 --- a/src/compiler/codegen/mips/Assemble.cc +++ b/src/compiler/codegen/mips/Assemble.cc @@ -548,7 +548,7 @@ AssemblerStatus oatAssembleInstructions(CompilationUnit *cUnit, SwitchTable *tabRec = (SwitchTable*)lir->operands[3]; int offset2 = tabRec ? tabRec->offset : lir->target->offset; int delta = offset2 - offset1; - if ((delta & 0xffff) == delta) { + if ((delta & 0xffff) == delta && ((delta & 0x8000) == 0)) { // Fits lir->operands[1] = delta; } else { @@ -563,6 +563,10 @@ AssemblerStatus oatAssembleInstructions(CompilationUnit *cUnit, lir->operands[0], 0, lir->operands[2], lir->operands[3], 0, lir->target); oatInsertLIRBefore((LIR*)lir, (LIR*)newDeltaLo); + LIR *newAddu = + rawLIR(cUnit, lir->dalvikOffset, kMipsAddu, + lir->operands[0], lir->operands[0], r_RA); + oatInsertLIRBefore((LIR*)lir, (LIR*)newAddu); lir->flags.isNop = true; res = kRetryAll; } -- cgit v1.2.3-59-g8ed1b