fp_mips.cc revision 57b86d47b66322693a070185fadfb43cb9c12eab
1e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee/* 2e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * Copyright (C) 2012 The Android Open Source Project 3e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * 4e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * Licensed under the Apache License, Version 2.0 (the "License"); 5e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * you may not use this file except in compliance with the License. 6e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * You may obtain a copy of the License at 7e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * 8e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * http://www.apache.org/licenses/LICENSE-2.0 9e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * 10e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * Unless required by applicable law or agreed to in writing, software 11e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * distributed under the License is distributed on an "AS IS" BASIS, 12e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * See the License for the specific language governing permissions and 14e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * limitations under the License. 15e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee */ 16e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee 1757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers#include "oat/runtime/oat_support_entrypoints.h" 1857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 19e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbeenamespace art { 20e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee 215de3494e4297c0d480409da3fecee39173f1d4e1buzbeebool genArithOpFloat(CompilationUnit *cUnit, MIR *mir, RegLocation rlDest, 225de3494e4297c0d480409da3fecee39173f1d4e1buzbee RegLocation rlSrc1, RegLocation rlSrc2) 23e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee{ 24e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee#ifdef __mips_hard_float 25e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee int op = kMipsNop; 26e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee RegLocation rlResult; 27e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee 28e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee /* 29e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * Don't attempt to optimize register usage since these opcodes call out to 30e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee * the handlers. 31e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee */ 32e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee switch (mir->dalvikInsn.opcode) { 33adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::ADD_FLOAT_2ADDR: 34adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::ADD_FLOAT: 35e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee op = kMipsFadds; 36e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 37adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::SUB_FLOAT_2ADDR: 38adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::SUB_FLOAT: 39e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee op = kMipsFsubs; 40e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 41adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::DIV_FLOAT_2ADDR: 42adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::DIV_FLOAT: 43e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee op = kMipsFdivs; 44e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 45adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::MUL_FLOAT_2ADDR: 46adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::MUL_FLOAT: 47e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee op = kMipsFmuls; 48e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 49adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::REM_FLOAT_2ADDR: 50adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::REM_FLOAT: 51adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::NEG_FLOAT: { 52e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee return genArithOpFloatPortable(cUnit, mir, rlDest, rlSrc1, rlSrc2); 53e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee } 54e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee default: 55e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee return true; 56e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee } 57e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlSrc1 = loadValue(cUnit, rlSrc1, kFPReg); 58e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlSrc2 = loadValue(cUnit, rlSrc2, kFPReg); 59e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlResult = oatEvalLoc(cUnit, rlDest, kFPReg, true); 605de3494e4297c0d480409da3fecee39173f1d4e1buzbee newLIR3(cUnit, (MipsOpCode)op, rlResult.lowReg, rlSrc1.lowReg, 615de3494e4297c0d480409da3fecee39173f1d4e1buzbee rlSrc2.lowReg); 62e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee storeValue(cUnit, rlDest, rlResult); 63e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee 64e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee return false; 65e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee#else 6611f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee return genArithOpFloatPortable(cUnit, mir, rlDest, rlSrc1, rlSrc2); 67e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee#endif 68e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee} 69e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee 70e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbeestatic bool genArithOpDouble(CompilationUnit *cUnit, MIR *mir, 71e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee RegLocation rlDest, RegLocation rlSrc1, 72e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee RegLocation rlSrc2) 73e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee{ 74e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee#ifdef __mips_hard_float 75e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee int op = kMipsNop; 76e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee RegLocation rlResult; 77e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee 78e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee switch (mir->dalvikInsn.opcode) { 79adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::ADD_DOUBLE_2ADDR: 80adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::ADD_DOUBLE: 81e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee op = kMipsFaddd; 82e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 83adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::SUB_DOUBLE_2ADDR: 84adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::SUB_DOUBLE: 85e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee op = kMipsFsubd; 86e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 87adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::DIV_DOUBLE_2ADDR: 88adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::DIV_DOUBLE: 89e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee op = kMipsFdivd; 90e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 91adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::MUL_DOUBLE_2ADDR: 92adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::MUL_DOUBLE: 93e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee op = kMipsFmuld; 94e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 95adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::REM_DOUBLE_2ADDR: 96adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::REM_DOUBLE: 97adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::NEG_DOUBLE: { 98e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee return genArithOpDoublePortable(cUnit, mir, rlDest, rlSrc1, rlSrc2); 99e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee } 100e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee default: 101e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee return true; 102e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee } 103e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlSrc1 = loadValueWide(cUnit, rlSrc1, kFPReg); 104e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee DCHECK(rlSrc1.wide); 105e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlSrc2 = loadValueWide(cUnit, rlSrc2, kFPReg); 106e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee DCHECK(rlSrc2.wide); 107e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlResult = oatEvalLoc(cUnit, rlDest, kFPReg, true); 108e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee DCHECK(rlDest.wide); 109e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee DCHECK(rlResult.wide); 110e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee newLIR3(cUnit, (MipsOpCode)op, S2D(rlResult.lowReg, rlResult.highReg), 111e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee S2D(rlSrc1.lowReg, rlSrc1.highReg), 112e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee S2D(rlSrc2.lowReg, rlSrc2.highReg)); 113e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee storeValueWide(cUnit, rlDest, rlResult); 114e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee return false; 115e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee#else 11611f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee return genArithOpDoublePortable(cUnit, mir, rlDest, rlSrc1, rlSrc2); 117e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee#endif 118e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee} 119e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee 120e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbeestatic bool genConversion(CompilationUnit *cUnit, MIR *mir) 121e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee{ 1225de3494e4297c0d480409da3fecee39173f1d4e1buzbee#ifdef __mips_hard_float 123adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes Instruction::Code opcode = mir->dalvikInsn.opcode; 124e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee bool longSrc = false; 125e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee bool longDest = false; 126e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee RegLocation rlSrc; 127e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee RegLocation rlDest; 128e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee int op = kMipsNop; 129e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee int srcReg; 130e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee RegLocation rlResult; 131e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee switch (opcode) { 132adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::INT_TO_FLOAT: 133e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee longSrc = false; 134e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee longDest = false; 135e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee op = kMipsFcvtsw; 136e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 137adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::DOUBLE_TO_FLOAT: 138e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee longSrc = true; 139e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee longDest = false; 140e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee op = kMipsFcvtsd; 141e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 142adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::FLOAT_TO_DOUBLE: 143e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee longSrc = false; 144e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee longDest = true; 145e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee op = kMipsFcvtds; 146e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 147adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::INT_TO_DOUBLE: 148e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee longSrc = false; 149e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee longDest = true; 150e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee op = kMipsFcvtdw; 151e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 152adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::FLOAT_TO_INT: 153adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::DOUBLE_TO_INT: 154adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::LONG_TO_DOUBLE: 155adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::FLOAT_TO_LONG: 156adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::LONG_TO_FLOAT: 157adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::DOUBLE_TO_LONG: 158e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee return genConversionPortable(cUnit, mir); 159e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee default: 160e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee return true; 161e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee } 162e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee if (longSrc) { 163e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlSrc = oatGetSrcWide(cUnit, mir, 0, 1); 164e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlSrc = loadValueWide(cUnit, rlSrc, kFPReg); 165e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee srcReg = S2D(rlSrc.lowReg, rlSrc.highReg); 166e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee } else { 167e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlSrc = oatGetSrc(cUnit, mir, 0); 168e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlSrc = loadValue(cUnit, rlSrc, kFPReg); 169e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee srcReg = rlSrc.lowReg; 170e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee } 171e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee if (longDest) { 172e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlDest = oatGetDestWide(cUnit, mir, 0, 1); 173e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlResult = oatEvalLoc(cUnit, rlDest, kFPReg, true); 174e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee newLIR2(cUnit, (MipsOpCode)op, S2D(rlResult.lowReg, rlResult.highReg), srcReg); 175e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee storeValueWide(cUnit, rlDest, rlResult); 176e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee } else { 177e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlDest = oatGetDest(cUnit, mir, 0); 178e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee rlResult = oatEvalLoc(cUnit, rlDest, kFPReg, true); 179e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee newLIR2(cUnit, (MipsOpCode)op, rlResult.lowReg, srcReg); 180e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee storeValue(cUnit, rlDest, rlResult); 181e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee } 182e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee return false; 183e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee#else 18411f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee return genConversionPortable(cUnit, mir); 185e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee#endif 186e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee} 187e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee 188e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbeestatic bool genCmpFP(CompilationUnit *cUnit, MIR *mir, RegLocation rlDest, 189e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee RegLocation rlSrc1, RegLocation rlSrc2) 190e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee{ 191e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee bool wide = true; 19211f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee int offset; 193e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee 194b25c3f6a86dc634ce44fb2849385b49465caa84dElliott Hughes switch (mir->dalvikInsn.opcode) { 195adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::CMPL_FLOAT: 19657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers offset = ENTRYPOINT_OFFSET(pCmplFloat); 197e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee wide = false; 198e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 199adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::CMPG_FLOAT: 20057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers offset = ENTRYPOINT_OFFSET(pCmpgFloat); 201e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee wide = false; 202e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 203adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::CMPL_DOUBLE: 20457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers offset = ENTRYPOINT_OFFSET(pCmplDouble); 205e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 206adb8c67f6d87a160d4e3a8afea7cb93f6c14568bElliott Hughes case Instruction::CMPG_DOUBLE: 20757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers offset = ENTRYPOINT_OFFSET(pCmpgDouble); 208e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee break; 209e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee default: 210e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee return true; 211e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee } 21211f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee oatFlushAllRegs(cUnit); 21311f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee oatLockCallTemps(cUnit); 21411f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee if (wide) { 21511f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee loadValueDirectWideFixed(cUnit, rlSrc1, rARG0, rARG1); 21611f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee loadValueDirectWideFixed(cUnit, rlSrc2, rARG2, rARG3); 21711f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee } else { 21811f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee loadValueDirectFixed(cUnit, rlSrc1, rARG0); 21911f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee loadValueDirectFixed(cUnit, rlSrc2, rARG1); 22011f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee } 22111f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee int rTgt = loadHelper(cUnit, offset); 22211f9d2130e938511efceb6d2a4793cee7dfdde35Bill Buzbee opReg(cUnit, kOpBlx, rTgt); 223f7d9ad39541dd09030e26d54d3b73a076f90cc74Ian Rogers RegLocation rlResult = oatGetReturn(cUnit, false); 224e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee storeValue(cUnit, rlDest, rlResult); 225e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee return false; 226e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee} 227e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee 228e3acd07f28d5625062b599c2817cb5f7a53f54a9buzbee} // namespace art 229