diff options
Diffstat (limited to 'compiler/dex/quick/x86/utility_x86.cc')
-rw-r--r-- | compiler/dex/quick/x86/utility_x86.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/compiler/dex/quick/x86/utility_x86.cc b/compiler/dex/quick/x86/utility_x86.cc index 4f65a0f5af..30384ec44f 100644 --- a/compiler/dex/quick/x86/utility_x86.cc +++ b/compiler/dex/quick/x86/utility_x86.cc @@ -990,6 +990,17 @@ void X86Mir2Lir::AnalyzeExtendedMIR(int opcode, BasicBlock * bb, MIR *mir) { case kMirOpConstVector: store_method_addr_ = true; break; + case kMirOpPackedMultiply: + case kMirOpPackedShiftLeft: + case kMirOpPackedSignedShiftRight: + case kMirOpPackedUnsignedShiftRight: { + // Byte emulation requires constants from the literal pool. + OpSize opsize = static_cast<OpSize>(mir->dalvikInsn.vC >> 16); + if (opsize == kSignedByte || opsize == kUnsignedByte) { + store_method_addr_ = true; + } + break; + } default: // Ignore the rest. break; |