InterpAsm-armv5te.S revision 445194bc141dc67e2f678aa1bbd5e59ca66254e5
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This file was generated automatically by gen-mterp.py for 'armv5te'. 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * --> DO NOT EDIT <-- 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/header.S */ 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ARMv5 definitions and declarations. 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectARM EABI general notes: 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr0-r3 hold first 4 args to a method; they are not preserved across method calls 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr4-r8 are available for general use 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr9 is given special treatment in some situations, but not for us 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr10 (sl) seems to be generally available 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr11 (fp) is used by gcc (unless -fomit-frame-pointer is set) 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr12 (ip) is scratch -- not preserved across method calls 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr13 (sp) should be managed carefully in case a signal arrives 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr14 (lr) must be preserved 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr15 (pc) can be tinkered with directly 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr0 holds returns of <= 4 bytes 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectr0-r1 hold returns of 8 bytes, low word in r0 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFaddenCallee must save/restore r4+ (except r12) if it modifies them. If VFP 44a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFaddenis present, registers s16-s31 (a/k/a d8-d15, a/k/a q4-q7) must be preserved, 45a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFaddens0-s15 (d0-d7, q0-a3) do not need to be. 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectStack is "full descending". Only the arguments that don't fit in the first 4 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectregisters are placed on the stack. "sp" points at the first stacked argument 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project(i.e. the 5th arg). 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectVFP: single-precision results in s0, double-precision results in d0. 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectIn the EABI, "sp" must be 64-bit aligned on entry to a function, and any 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project64-bit quantities (long long, double) must be 64-bit aligned. 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectMterp and ARM notes: 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectThe following registers have fixed assignments: 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project reg nick purpose 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project r4 rPC interpreted program counter, used for fetching instructions 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project r5 rFP interpreted frame pointer, used for accessing locals and args 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project r6 rGLUE MterpGlue pointer 661da12167d913efde56ec3b40491524b051679f2cAndy McFadden r7 rINST first 16-bit code unit of current instruction 671da12167d913efde56ec3b40491524b051679f2cAndy McFadden r8 rIBASE interpreted instruction base pointer, used for computed goto 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectMacros are provided for common operations. Each macro MUST emit only 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectone instruction to make instruction-counting easier. They MUST NOT alter 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectunspecified registers or condition codes. 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* single-purpose registers, given names for clarity */ 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rPC r4 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rFP r5 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rGLUE r6 781da12167d913efde56ec3b40491524b051679f2cAndy McFadden#define rINST r7 791da12167d913efde56ec3b40491524b051679f2cAndy McFadden#define rIBASE r8 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* save/restore the PC and/or FP from the glue struct */ 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOAD_PC_FROM_GLUE() ldr rPC, [rGLUE, #offGlue_pc] 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVE_PC_TO_GLUE() str rPC, [rGLUE, #offGlue_pc] 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOAD_FP_FROM_GLUE() ldr rFP, [rGLUE, #offGlue_fp] 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVE_FP_TO_GLUE() str rFP, [rGLUE, #offGlue_fp] 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOAD_PC_FP_FROM_GLUE() ldmia rGLUE, {rPC, rFP} 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVE_PC_FP_TO_GLUE() stmia rGLUE, {rPC, rFP} 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "export" the PC to the stack frame, f/b/o future exception objects. Must 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be done *before* something calls dvmThrowException. 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "SAVEAREA_FROM_FP(fp)->xtra.currentPc = pc", i.e. 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fp - sizeof(StackSaveArea) + offsetof(SaveArea, xtra.currentPc) 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * It's okay to do this more than once. 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define EXPORT_PC() \ 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str rPC, [rFP, #(-sizeofStackSaveArea + offStackSaveArea_currentPc)] 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Given a frame pointer, find the stack save area. 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "((StackSaveArea*)(_fp) -1)". 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVEAREA_FROM_FP(_reg, _fpreg) \ 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub _reg, _fpreg, #sizeofStackSaveArea 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch the next instruction from rPC into rINST. Does not advance rPC. 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_INST() ldrh rINST, [rPC] 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch the next instruction from the specified offset. Advances rPC 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to point to the next instruction. "_count" is in 16-bit code units. 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Because of the limited size of immediate constants on ARM, this is only 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * suitable for small forward movements (i.e. don't try to implement "goto" 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * with this). 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This must come AFTER anything that can throw an exception, or the 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * exception catch may miss. (This also implies that it must come after 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * EXPORT_PC().) 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_ADVANCE_INST(_count) ldrh rINST, [rPC, #(_count*2)]! 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 129642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng * The operation performed here is similar to FETCH_ADVANCE_INST, except the 130642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng * src and dest registers are parameterized (not hard-wired to rPC and rINST). 131642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng */ 132642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng#define PREFETCH_ADVANCE_INST(_dreg, _sreg, _count) \ 133642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldrh _dreg, [_sreg, #(_count*2)]! 134642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng 135642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng/* 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch the next instruction from an offset specified by _reg. Updates 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC to point to the next instruction. "_reg" must specify the distance 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in bytes, *not* 16-bit code units, and may be a signed value. 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We want to write "ldrh rINST, [rPC, _reg, lsl #2]!", but some of the 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bits that hold the shift distance are used for the half/byte/sign flags. 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In some cases we can pre-double _reg for free, so we require a byte offset 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * here. 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_ADVANCE_INST_RB(_reg) ldrh rINST, [rPC, _reg]! 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch a half-word code unit from an offset past the current PC. The 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "_count" value is in 16-bit code units. Does not advance rPC. 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The "_S" variant works the same but treats the value as signed. 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH(_reg, _count) ldrh _reg, [rPC, #(_count*2)] 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_S(_reg, _count) ldrsh _reg, [rPC, #(_count*2)] 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch one byte from an offset past the current PC. Pass in the same 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "_count" as you would for FETCH, and an additional 0/1 indicating which 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * byte of the halfword you want (lo/hi). 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_B(_reg, _count, _byte) ldrb _reg, [rPC, #(_count*2+_byte)] 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Put the instruction's opcode field into the specified register. 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GET_INST_OPCODE(_reg) and _reg, rINST, #255 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 169642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng * Put the prefetched instruction's opcode field into the specified register. 170642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng */ 171642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng#define GET_PREFETCHED_OPCODE(_oreg, _ireg) and _oreg, _ireg, #255 172642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng 173642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng/* 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Begin executing the opcode in _reg. Because this only jumps within the 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * interpreter, we don't have to worry about pre-ARMv5 THUMB interwork. 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GOTO_OPCODE(_reg) add pc, rIBASE, _reg, lsl #6 178ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#define GOTO_OPCODE_IFEQ(_reg) addeq pc, rIBASE, _reg, lsl #6 179ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#define GOTO_OPCODE_IFNE(_reg) addne pc, rIBASE, _reg, lsl #6 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get/set the 32-bit value from a Dalvik register. 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GET_VREG(_reg, _vreg) ldr _reg, [rFP, _vreg, lsl #2] 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SET_VREG(_reg, _vreg) str _reg, [rFP, _vreg, lsl #2] 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 187ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 188ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/* 189ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Null definition for overhead measuring purposes 190ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */ 191ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#define GET_JIT_TABLE(_reg) ldr _reg,[rGLUE,#offGlue_pJitTable] 192ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#define GET_JIT_PROF_TABLE(_reg) ldr _reg,[rGLUE,#offGlue_pJitProfTable] 193ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 194ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 196a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFadden * Convert a virtual register index into an address. 197a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFadden */ 198a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFadden#define VREG_INDEX_TO_ADDR(_reg, _vreg) \ 199a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFadden add _reg, rFP, _vreg, lsl #2 200a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFadden 201a80b76553c2b9f33c4063ae8c69c5362d961de81Andy McFadden/* 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is a #include, not a %include, because we want the C pre-processor 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to expand the macros into assembler assignment statements. 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "../common/asm-constants.h" 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/platform.S */ 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * CPU-version-specific defines 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Macro for "LDR PC,xxx", which is not allowed pre-ARMv5. Essentially a 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * one-way branch. 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * May modify IP. Does not modify LR. 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.macro LDR_PC source 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr pc, \source 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Macro for "MOV LR,PC / LDR PC,xxx", which is not allowed pre-ARMv5. 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Jump to subroutine. 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * May modify IP and LR. 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.macro LDR_PC_LR source 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov lr, pc 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr pc, \source 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Macro for "LDMFD SP!, {...regs...,PC}". 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * May modify IP and LR. 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.macro LDMFD_PC regs 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {\regs,pc} 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/entry.S */ 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interpreter entry point. 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't have formal stack frames, so gdb scans upward in the code 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to find the start of the function (a label with the %function type), 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and then looks at the next few instructions to figure out what 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * got pushed onto the stack. From this it figures out how to restore 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the registers, including PC, for the previous stack frame. If gdb 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sees a non-function label, it stops scanning, so either we need to 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * have nothing but assembler-local labels between the entry point and 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the break, or we need to fake it out. 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * When this is defined, we add some stuff to make gdb less confused. 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define ASSIST_DEBUGGER 1 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .align 2 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdRun 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdRun, %function 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 MterpGlue* glue 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This function returns a boolean "changeInterp" value. The return comes 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * via a call to dvmMterpStdBail(). 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdRun: 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define MTERP_ENTRY1 \ 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .save {r4-r10,fp,lr}; \ 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r4-r10,fp,lr} @ save 9 regs 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define MTERP_ENTRY2 \ 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .pad #4; \ 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub sp, sp, #4 @ align 64 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .fnstart 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MTERP_ENTRY1 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MTERP_ENTRY2 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* save stack pointer, add magic word for debuggerd */ 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str sp, [r0, #offGlue_bailPtr] @ save SP for eventual return 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* set up "named" registers, figure out entry point */ 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov rGLUE, r0 @ set rGLUE 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r1, [r0, #offGlue_entryPoint] @ InterpEntry enum is char 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_PC_FP_FROM_GLUE() @ load rPC and rFP from "glue" 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adr rIBASE, dvmAsmInstructionStart @ set rIBASE 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #kInterpEntryInstr @ usual case? 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .Lnot_instr @ no, handle it 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 315ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 316ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.Lno_singleStep: 317ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng /* Entry is always a possible trace start */ 318ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 319ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_INST() 320ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 321ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 322ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) 323ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) 324ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* start executing the instruction at rPC */ 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() @ load rINST from rPC 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 329ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lnot_instr: 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #kInterpEntryReturn @ were we returning from a method? 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_returnFromMethod 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lnot_return: 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #kInterpEntryThrow @ were we throwing an exception? 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 339ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 340ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.Lnot_throw: 341ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldr r0,[rGLUE, #offGlue_jitResume] 342ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldr r2,[rGLUE, #offGlue_jitResumePC] 343ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r1, #kInterpEntryResume @ resuming after Jit single-step? 344ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne .Lbad_arg 345ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp rPC,r2 346ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne .Lno_singleStep @ must have branched, don't resume 347ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r1, #kInterpEntryInstr 348ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng strb r1, [rGLUE, #offGlue_entryPoint] 349ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldr rINST, .LdvmCompilerTemplate 350ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bx r0 @ re-enter the translation 351ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.LdvmCompilerTemplate: 352ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .word dvmCompilerTemplateStart 353ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 354ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lbad_arg: 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strBadEntryPoint 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ r1 holds value of entryPoint 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl printf 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmAbort 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .fnend 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdBail 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdBail, %function 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Restore the stack pointer and PC from the save point established on entry. 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is essentially the same as a longjmp, but should be cheaper. The 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * last instruction causes us to return to whoever called dvmMterpStdRun. 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We pushed some registers on the stack in dvmMterpStdRun, then saved 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * SP and LR. Here we restore SP, restore the registers, and then restore 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * LR to PC. 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 MterpGlue* glue 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 bool changeInterp 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdBail: 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr sp, [r0, #offGlue_bailPtr] @ sp<- saved SP 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r1 @ return the changeInterp value 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add sp, sp, #4 @ un-align 64 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LDMFD_PC "r4-r10,fp" @ restore 9 regs and return 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * String references. 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrBadEntryPoint: 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrBadEntryPoint 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmInstructionStart 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmAsmInstructionStart, %function 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionStart = .L_OP_NOP 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOP: /* 0x00 */ 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NOP.S */ 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance to next instr, load rINST 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute it 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef ASSIST_DEBUGGER 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* insert fake function header to help gdb find the stack frame */ 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dalvik_inst, %function 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectdalvik_inst: 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .fnstart 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MTERP_ENTRY1 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MTERP_ENTRY2 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .fnend 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE: /* 0x01 */ 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE.S */ 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B from 15:12 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A from 11:8 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[B] 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[A]<- r2 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute next instruction 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_FROM16: /* 0x02 */ 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_FROM16.S */ 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[BBBB] 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[AA]<- r2 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_16: /* 0x03 */ 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_16.S */ 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- AAAA 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[BBBB] 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[AAAA]<- r2 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE: /* 0x04 */ 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_WIDE.S */ 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide vA, vB */ 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A(+) 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[A] 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- fp[B] 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r2, {r0-r1} @ fp[A]<- r0/r1 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_FROM16: /* 0x05 */ 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_WIDE_FROM16.S */ 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/from16 vAA, vBBBB */ 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 1) @ r3<- BBBB 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[BBBB] 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[AA] 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- fp[BBBB] 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r2, {r0-r1} @ fp[AA]<- r0/r1 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_16: /* 0x06 */ 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_WIDE_16.S */ 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/16 vAAAA, vBBBB */ 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 2) @ r3<- BBBB 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r2, 1) @ r2<- AAAA 507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[BBBB] 508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[AAAA] 509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- fp[BBBB] 510445194bc141dc67e2f678aa1bbd5e59ca66254e5Andy McFadden FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r2, {r0-r1} @ fp[AAAA]<- r0/r1 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT: /* 0x07 */ 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_OBJECT.S */ 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE.S */ 521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B from 15:12 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A from 11:8 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[B] 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[A]<- r2 530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute next instruction 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_FROM16: /* 0x08 */ 537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_OBJECT_FROM16.S */ 538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_FROM16.S */ 539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[BBBB] 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[AA]<- r2 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_16: /* 0x09 */ 554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_OBJECT_16.S */ 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_16.S */ 556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB 559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- AAAA 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[BBBB] 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[AAAA]<- r2 564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT: /* 0x0a */ 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_RESULT.S */ 572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_retval] @ r0<- glue->retval.i 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[AA]<- r0 579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_WIDE: /* 0x0b */ 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_RESULT_WIDE.S */ 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-result-wide vAA */ 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rGLUE, #offGlue_retval @ r3<- &glue->retval 589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[AA] 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- retval.j 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r2, {r0-r1} @ fp[AA]<- r0/r1 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_OBJECT: /* 0x0c */ 600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_RESULT_OBJECT.S */ 601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_RESULT.S */ 602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_retval] @ r0<- glue->retval.i 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[AA]<- r0 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_EXCEPTION: /* 0x0d */ 616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_EXCEPTION.S */ 617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-exception vAA */ 618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offThread_exception] @ r3<- dvmGetException bypass 621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 @ r1<- 0 622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r3, r2) @ fp[AA]<- exception obj 624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offThread_exception] @ dvmClearException bypass 626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_VOID: /* 0x0e */ 632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN_VOID.S */ 633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_returnFromMethod 634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN: /* 0x0f */ 639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN.S */ 640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vAA 649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [rGLUE, #offGlue_retval] @ retval.i <- vAA 650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_returnFromMethod 651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_WIDE: /* 0x10 */ 656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN_WIDE.S */ 657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 64-bit value. Copies the return value into the "glue" 659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* return-wide vAA */ 662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[AA] 664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rGLUE, #offGlue_retval @ r3<- &glue->retval 665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1 <- vAA/vAA+1 666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r3, {r0-r1} @ retval<- r0/r1 667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_returnFromMethod 668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_OBJECT: /* 0x11 */ 673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN_OBJECT.S */ 674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN.S */ 675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vAA 684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [rGLUE, #offGlue_retval] @ retval.i <- vAA 685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_returnFromMethod 686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_4: /* 0x12 */ 692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_4.S */ 693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/4 vA, #+B */ 694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsl #16 @ r1<- Bxxx0000 695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, asr #28 @ r1<- sssssssB (sign-extended) 698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r0) @ fp[A]<- r1 701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute next instruction 702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_16: /* 0x13 */ 707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_16.S */ 708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/16 vAA, #+BBBB */ 709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r0, 1) @ r0<- ssssBBBB (sign-extended) 710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r3) @ vAA<- r0 713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST: /* 0x14 */ 720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST.S */ 721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const vAA, #+BBBBbbbb */ 722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- bbbb (low) 724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB (high) 725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, lsl #16 @ r0<- BBBBbbbb 727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r3) @ vAA<- r0 729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_HIGH16: /* 0x15 */ 735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_HIGH16.S */ 736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/high16 vAA, #+BBBB0000 */ 737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- 0000BBBB (zero-extended) 738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsl #16 @ r0<- BBBB0000 740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r3) @ vAA<- r0 742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_16: /* 0x16 */ 749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_WIDE_16.S */ 750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/16 vAA, #+BBBB */ 751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r0, 1) @ r0<- ssssBBBB (sign-extended) 752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0, asr #31 @ r1<- ssssssss 754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[AA] 756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r3, {r0-r1} @ vAA<- r0/r1 758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_32: /* 0x17 */ 764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_WIDE_32.S */ 765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/32 vAA, #+BBBBbbbb */ 766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- 0000bbbb (low) 767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r2, 2) @ r2<- ssssBBBB (high) 769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r2, lsl #16 @ r0<- BBBBbbbb 771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[AA] 772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0, asr #31 @ r1<- ssssssss 773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r3, {r0-r1} @ vAA<- r0/r1 775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE: /* 0x18 */ 781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_WIDE.S */ 782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide vAA, #+HHHHhhhhBBBBbbbb */ 783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- bbbb (low) 784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB (low middle) 785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r2, 3) @ r2<- hhhh (high middle) 786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, lsl #16 @ r0<- BBBBbbbb (low word) 787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 4) @ r3<- HHHH (high) 788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r2, r3, lsl #16 @ r1<- HHHHhhhh (high word) 790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(5) @ advance rPC, load rINST 791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA<- r0/r1 794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_HIGH16: /* 0x19 */ 800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_WIDE_HIGH16.S */ 801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/high16 vAA, #+BBBB000000000000 */ 802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- 0000BBBB (zero-extended) 803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, #0 @ r0<- 00000000 805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, lsl #16 @ r1<- BBBB0000 806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[AA] 808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r3, {r0-r1} @ vAA<- r0/r1 810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING: /* 0x1a */ 816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_STRING.S */ 817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBB */ 818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- glue->methodClassDex 820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResStrings] @ r2<- dvmDex->pResStrings 822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- pResStrings[BBBB] 823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ not yet resolved? 824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_CONST_STRING_resolve 825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING_JUMBO: /* 0x1b */ 833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_STRING_JUMBO.S */ 834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBBBBBB */ 835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- bbbb (low) 836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB (high) 837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- glue->methodClassDex 838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResStrings] @ r2<- dvmDex->pResStrings 840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r0, r1, lsl #16 @ r1<- BBBBbbbb 841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- pResStrings[BBBB] 842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_CONST_STRING_JUMBO_resolve 844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_CLASS: /* 0x1c */ 852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_CLASS.S */ 853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/class vAA, Class@BBBB */ 854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- glue->methodClassDex 856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResClasses] @ r2<- dvmDex->pResClasses 858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- pResClasses[BBBB] 859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ not yet resolved? 860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_CONST_CLASS_resolve 861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_ENTER: /* 0x1d */ 869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MONITOR_ENTER.S */ 870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Synchronize on an object. 872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-enter vAA */ 874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- vAA (object) 876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ null object? 87899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project EXPORT_PC() @ need for precise GC, MONITOR_TRACKING 879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null object, throw an exception 880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmLockObject @ call(self, obj) 882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef WITH_DEADLOCK_PREDICTION /* implies WITH_MONITOR_TRACKING */ 883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offThread_exception] @ check for exception 885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_exceptionThrown @ exception raised, bail out 887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_EXIT: /* 0x1e */ 895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MONITOR_EXIT.S */ 896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlock an object. 898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Exceptions that occur when unlocking a monitor need to appear as 900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if they happened at the following instruction. See the Dalvik 901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction spec. 902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-exit vAA */ 904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ before fetch: export the PC 906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- vAA (object) 907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ null object? 908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes 909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmUnlockObject @ r0<- success for unlock(self, obj) 911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, exception is pending 913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ before throw: advance rPC, load rINST 914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CHECK_CAST: /* 0x1f */ 921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CHECK_CAST.S */ 922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if a cast from one class to another is allowed. 924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* check-cast vAA, class@BBBB */ 926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r2, 1) @ r2<- BBBB 928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r3) @ r9<- object 929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_methodClassDex] @ r0<- pDvmDex 930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ is object null? 931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offDvmDex_pResClasses] @ r0<- pDvmDex->pResClasses 932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_CHECK_CAST_okay @ null obj, cast always succeeds 933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, r2, lsl #2] @ r1<- resolved class 934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, #offObject_clazz] @ r0<- obj->clazz 935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ have we resolved this before? 936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_CHECK_CAST_resolve @ not resolved, do it now 937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolved: 938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, r1 @ same class (trivial success)? 939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_CHECK_CAST_fullcheck @ no, do full check 940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_okay: 941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INSTANCE_OF: /* 0x20 */ 948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INSTANCE_OF.S */ 949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if an object reference is an instance of a class. 951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Most common situation is a non-null object, being compared against 953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an already-resolved class. 954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* instance-of vA, vB, class@CCCC */ 956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB (object) 959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 @ r9<- A 960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is object null? 961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- pDvmDex 962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_INSTANCE_OF_store @ null obj, not an instance, store r0 963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 1) @ r3<- CCCC 964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResClasses] @ r2<- pDvmDex->pResClasses 965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r2, r3, lsl #2] @ r1<- resolved class 966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offObject_clazz] @ r0<- obj->clazz 967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ have we resolved this before? 968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_INSTANCE_OF_resolve @ not resolved, do it now 969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolved: @ r0=obj->clazz, r1=resolved class 970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, r1 @ same class (trivial success)? 971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_INSTANCE_OF_trivial @ yes, trivial finish 972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_INSTANCE_OF_fullcheck @ no, do full check 973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ARRAY_LENGTH: /* 0x21 */ 977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ARRAY_LENGTH.S */ 978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the length of an array. 980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- vB (object ref) 984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is object null? 986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yup, fail 987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- array length 989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r3, r2) @ vB<- length 991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_INSTANCE: /* 0x22 */ 997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEW_INSTANCE.S */ 998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new instance of a class. 1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-instance vAA, class@BBBB */ 1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResClasses] @ r3<- pDvmDex->pResClasses 1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved class 1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ req'd for init, resolve, alloc 1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_NEW_INSTANCE_resolve @ no, resolve it now 1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolved: @ r0=class 1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r1, [r0, #offClassObject_status] @ r1<- ClassStatus enum 1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #CLASS_INITIALIZED @ has class been initialized? 1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_NEW_INSTANCE_needinit @ no, init class now 1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_initialized: @ r0=class 1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #ALLOC_DONT_TRACK @ flags for alloc call 1015b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden bl dvmAllocObject @ r0<- new object 1016b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden b .LOP_NEW_INSTANCE_finish @ continue 1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_ARRAY: /* 0x23 */ 1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEW_ARRAY.S */ 1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Allocate an array of objects, specified with the array class 1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and a count. 1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The verifier guarantees that this is an array class, so we don't 1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check for it here. 1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-array vA, vB, class@CCCC */ 1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r2, 1) @ r2<- CCCC 1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r0) @ r1<- vB (array length) 1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResClasses] @ r3<- pDvmDex->pResClasses 1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ check length 1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r2, lsl #2] @ r0<- resolved class 1037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_errNegativeArraySize @ negative length, bail 1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ req'd for resolve, alloc 1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_NEW_ARRAY_finish @ resolved, continue 1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_NEW_ARRAY_resolve @ do resolve now 1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY: /* 0x24 */ 1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FILLED_NEW_ARRAY.S */ 1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResClasses] @ r3<- pDvmDex->pResClasses 1057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ need for resolve and alloc 1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved class 1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r10, rINST, lsr #8 @ r10<- AA or BA 1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_FILLED_NEW_ARRAY_continue @ yes, continue on 1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ r2<- false 1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- call(clazz, ref) 1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_FILLED_NEW_ARRAY_continue 1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY_RANGE: /* 0x25 */ 1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FILLED_NEW_ARRAY_RANGE.S */ 1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FILLED_NEW_ARRAY.S */ 1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResClasses] @ r3<- pDvmDex->pResClasses 1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ need for resolve and alloc 1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved class 1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r10, rINST, lsr #8 @ r10<- AA or BA 1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_FILLED_NEW_ARRAY_RANGE_continue @ yes, continue on 1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ r2<- false 1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- call(clazz, ref) 1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_FILLED_NEW_ARRAY_RANGE_continue 1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILL_ARRAY_DATA: /* 0x26 */ 1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FILL_ARRAY_DATA.S */ 1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* fill-array-data vAA, +BBBBBBBB */ 1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- bbbb (lo) 1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB (hi) 1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r0, r1, lsl #16 @ r1<- BBBBbbbb 1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vAA (array object) 1109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rPC, r1, lsl #1 @ r1<- PC + BBBBbbbb*2 (array data off.) 1110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC(); 1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmInterpHandleFillArrayData@ fill the array with predefined data 1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ 0 means an exception is thrown 1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ has exception 1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_THROW: /* 0x27 */ 1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_THROW.S */ 1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception object in the current thread. 1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* throw vAA */ 1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- vAA (exception object) 1128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ null object? 1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, throw an NPE instead 1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ bypass dvmSetException, just store it 1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offThread_exception] @ thread->exception<- obj 1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO: /* 0x28 */ 1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_GOTO.S */ 1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 8-bit offset. 1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset, which we need to 1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * double to get a byte offset. 1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto +AA */ 1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsl #16 @ r0<- AAxx0000 1148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r0, asr #24 @ r9<- ssssssAA (sign-extended) 1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r9, lsl #1 @ r9<- byte offset 1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1151ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1152ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1154ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 1155ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1158ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1159ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1160ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) @ extract opcode from rINST 1161ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) @ jump to next instruction 1162ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_16: /* 0x29 */ 1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_GOTO_16.S */ 1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 16-bit offset. 1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset, which we need to 1172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * double to get a byte offset. 1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/16 +AAAA */ 1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r0, 1) @ r0<- ssssAAAA (sign-extended) 1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r0, asl #1 @ r9<- byte offset, check sign 1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1178ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1179ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1180ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1181ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 1182ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 1183ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) @ extract opcode from rINST 1184ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) @ jump to next instruction 1185ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1189ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_32: /* 0x2a */ 1195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_GOTO_32.S */ 1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 32-bit offset. 1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset, which we need to 1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * double to get a byte offset. 1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlike most opcodes, this one is allowed to branch to itself, so 1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * our "backward branch" test must be "<=0" instead of "<0". The ORRS 1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction doesn't affect the V flag, so we need to clear it 1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * explicitly. 1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/32 +AAAAAAAA */ 1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- aaaa (lo) 1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- AAAA (hi) 1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp ip, ip @ (clear V flag during stall) 1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs r0, r0, r1, lsl #16 @ r0<- AAAAaaaa, check sign 1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r0, asl #1 @ r9<- byte offset 1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ble common_backwardBranch @ backward branch, do periodic checks 1214ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1215ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1217ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 1218ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1221ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1222ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1223ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) @ extract opcode from rINST 1224ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) @ jump to next instruction 1225ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_PACKED_SWITCH: /* 0x2b */ 1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_PACKED_SWITCH.S */ 1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- bbbb (lo) 1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB (hi) 1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, lsl #16 @ r0<- BBBBbbbb 1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vAA 1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, rPC, r0, lsl #1 @ r0<- PC + BBBBbbbb*2 1247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmInterpHandlePackedSwitch @ r0<- code-unit branch offset 1248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r0, asl #1 @ r9<- branch byte offset, check sign 1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_backwardBranch @ (want to use BLE but V is unknown) 1251ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1252ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1253ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1254ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 1255ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 1256ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) @ extract opcode from rINST 1257ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) @ jump to next instruction 1258ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1262ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPARSE_SWITCH: /* 0x2c */ 1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPARSE_SWITCH.S */ 1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_PACKED_SWITCH.S */ 1270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- bbbb (lo) 1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB (hi) 1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, lsl #16 @ r0<- BBBBbbbb 1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vAA 1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, rPC, r0, lsl #1 @ r0<- PC + BBBBbbbb*2 1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmInterpHandleSparseSwitch @ r0<- code-unit branch offset 1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r0, asl #1 @ r9<- branch byte offset, check sign 1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_backwardBranch @ (want to use BLE but V is unknown) 1290ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1291ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1293ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 1294ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1297ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1298ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1299ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) @ extract opcode from rINST 1300ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) @ jump to next instruction 1301ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_FLOAT: /* 0x2d */ 1308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPL_FLOAT.S */ 1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two floating-point values. Puts 0, 1, or -1 into the 1311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * destination register based on the results of the comparison. 1312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Provide a "naninst" instruction that puts 1 or -1 into r1 depending 1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on what value we'd like to return when one of the operands is NaN. 1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The operation we're implementing is: 1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if (x == y) 1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return 0; 1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * else if (x < y) 1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return -1; 1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * else if (x > y) 1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return 1; 1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * else 1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return {-1,1}; // one or both operands was NaN 1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The straightforward implementation requires 3 calls to functions 1327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that return a result in r0. We can do it with two calls if our 1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * EABI library supports __aeabi_cfcmple (only one if we want to check 1329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for NaN directly): 1330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check x <= y 1331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if <, return -1 1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if ==, return 0 1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check y <= x 1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if <, return 1 1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return {-1,1} 1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: cmpl-float, cmpg-float 1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r2) @ r9<- vBB 1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r10, r3) @ r10<- vCC 1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ copy to arg registers 1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 1347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cfcmple @ cmp <=: C clear if <, Z set if eq 1348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bhi .LOP_CMPL_FLOAT_gt_or_nan @ C set and Z clear, disambiguate 1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvncc r1, #0 @ (less than) r1<- -1 1350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project moveq r1, #0 @ (equal) r1<- 0, trumps less than 1351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_finish: 1352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 1354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r3) @ vAA<- r1 1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_FLOAT: /* 0x2e */ 1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPG_FLOAT.S */ 1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPL_FLOAT.S */ 1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two floating-point values. Puts 0, 1, or -1 into the 1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * destination register based on the results of the comparison. 1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Provide a "naninst" instruction that puts 1 or -1 into r1 depending 1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on what value we'd like to return when one of the operands is NaN. 1369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The operation we're implementing is: 1371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if (x == y) 1372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return 0; 1373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * else if (x < y) 1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return -1; 1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * else if (x > y) 1376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return 1; 1377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * else 1378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return {-1,1}; // one or both operands was NaN 1379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The straightforward implementation requires 3 calls to functions 1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that return a result in r0. We can do it with two calls if our 1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * EABI library supports __aeabi_cfcmple (only one if we want to check 1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for NaN directly): 1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check x <= y 1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if <, return -1 1386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if ==, return 0 1387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check y <= x 1388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if <, return 1 1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return {-1,1} 1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: cmpl-float, cmpg-float 1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 1397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r2) @ r9<- vBB 1398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r10, r3) @ r10<- vCC 1399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ copy to arg registers 1400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 1401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cfcmple @ cmp <=: C clear if <, Z set if eq 1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bhi .LOP_CMPG_FLOAT_gt_or_nan @ C set and Z clear, disambiguate 1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvncc r1, #0 @ (less than) r1<- -1 1404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project moveq r1, #0 @ (equal) r1<- 0, trumps less than 1405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_finish: 1406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r3) @ vAA<- r1 1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_DOUBLE: /* 0x2f */ 1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPL_DOUBLE.S */ 1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two floating-point values. Puts 0, 1, or -1 into the 1419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * destination register based on the results of the comparison. 1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Provide a "naninst" instruction that puts 1 or -1 into r1 depending 1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on what value we'd like to return when one of the operands is NaN. 1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See OP_CMPL_FLOAT for an explanation. 1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: cmpl-double, cmpg-double 1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 1430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r0, #255 @ r9<- BB 1431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r10, r0, lsr #8 @ r10<- CC 1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[BB] 1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r10, rFP, r10, lsl #2 @ r10<- &fp[CC] 1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vBB/vBB+1 1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r10, {r2-r3} @ r2/r3<- vCC/vCC+1 1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cdcmple @ cmp <=: C clear if <, Z set if eq 1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bhi .LOP_CMPL_DOUBLE_gt_or_nan @ C set and Z clear, disambiguate 1438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvncc r1, #0 @ (less than) r1<- -1 1439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project moveq r1, #0 @ (equal) r1<- 0, trumps less than 1440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_finish: 1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r3) @ vAA<- r1 1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_DOUBLE: /* 0x30 */ 1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPG_DOUBLE.S */ 1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPL_DOUBLE.S */ 1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two floating-point values. Puts 0, 1, or -1 into the 1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * destination register based on the results of the comparison. 1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Provide a "naninst" instruction that puts 1 or -1 into r1 depending 1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on what value we'd like to return when one of the operands is NaN. 1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See OP_CMPL_FLOAT for an explanation. 1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: cmpl-double, cmpg-double 1462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r0, #255 @ r9<- BB 1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r10, r0, lsr #8 @ r10<- CC 1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[BB] 1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r10, rFP, r10, lsl #2 @ r10<- &fp[CC] 1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vBB/vBB+1 1470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r10, {r2-r3} @ r2/r3<- vCC/vCC+1 1471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cdcmple @ cmp <=: C clear if <, Z set if eq 1472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bhi .LOP_CMPG_DOUBLE_gt_or_nan @ C set and Z clear, disambiguate 1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvncc r1, #0 @ (less than) r1<- -1 1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project moveq r1, #0 @ (equal) r1<- 0, trumps less than 1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_finish: 1476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r3) @ vAA<- r1 1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMP_LONG: /* 0x31 */ 1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMP_LONG.S */ 1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two 64-bit values. Puts 0, 1, or -1 into the destination 1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * register based on the results of the comparison. 1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We load the full values with LDM, but in practice many values could 1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be resolved by only looking at the high word. This could be made 1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * faster or slower by splitting the LDM into a pair of LDRs. 1494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If we just wanted to set condition flags, we could do this: 1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * subs ip, r0, r2 1497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sbcs ip, r1, r3 1498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * subeqs ip, r0, r2 1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Leaving { <0, 0, >0 } in ip. However, we have to set it to a specific 1500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * integer value, which we can do with 2 conditional mov/mvn instructions 1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (set 1, set -1; if they're equal we already have 0 in ip), giving 1502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * us a constant 5-cycle path plus a branch at the end to the 1503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction epilogue code. The multi-compare approach below needs 1504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2 or 3 cycles + branch if the high word doesn't match, 6 + branch 1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in the worst case (the 64-bit values are equal). 1506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* cmp-long vAA, vBB, vCC */ 1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 1509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 1510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 1511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 1512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 1513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 1514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 1515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 1516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare (vBB+1, vCC+1) 1517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blt .LOP_CMP_LONG_less @ signed compare on high part 1518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bgt .LOP_CMP_LONG_greater 1519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r1, r0, r2 @ r1<- r0 - r2 1520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bhi .LOP_CMP_LONG_greater @ unsigned compare on low part 1521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_CMP_LONG_less 1522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_CMP_LONG_finish @ equal; r1 already holds 0 1523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQ: /* 0x32 */ 1527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_EQ.S */ 1528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */ 1529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r1) @ r3<- vB 1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vA 1542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (vA, vB) 1544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f @ branch to 1 if comparison failed 1545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ yes, do periodic checks 1548ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1: 1549ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1550ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1551ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1552ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng b common_testUpdateProfile 1553ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1554ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1557ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NE: /* 0x33 */ 1564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_NE.S */ 1565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */ 1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 1575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 1576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 1577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r1) @ r3<- vB 1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vA 1579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (vA, vB) 1581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq 1f @ branch to 1 if comparison failed 1582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ yes, do periodic checks 1585ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1: 1586ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1587ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1588ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1589ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng b common_testUpdateProfile 1590ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1591ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1594ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LT: /* 0x34 */ 1601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_LT.S */ 1602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */ 1603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 1612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 1613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 1614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r1) @ r3<- vB 1615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vA 1616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (vA, vB) 1618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bge 1f @ branch to 1 if comparison failed 1619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ yes, do periodic checks 1622ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1: 1623ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1624ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1625ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1626ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng b common_testUpdateProfile 1627ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1628ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1631ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GE: /* 0x35 */ 1638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_GE.S */ 1639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */ 1640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 1649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 1650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 1651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r1) @ r3<- vB 1652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vA 1653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (vA, vB) 1655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blt 1f @ branch to 1 if comparison failed 1656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ yes, do periodic checks 1659ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1: 1660ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1661ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1662ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1663ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng b common_testUpdateProfile 1664ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1665ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1668ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GT: /* 0x36 */ 1675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_GT.S */ 1676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */ 1677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 1686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 1687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 1688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r1) @ r3<- vB 1689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vA 1690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (vA, vB) 1692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ble 1f @ branch to 1 if comparison failed 1693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ yes, do periodic checks 1696ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1: 1697ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1698ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1699ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1700ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng b common_testUpdateProfile 1701ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1702ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1705ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LE: /* 0x37 */ 1712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_LE.S */ 1713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */ 1714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 1723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 1724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 1725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r1) @ r3<- vB 1726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vA 1727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (vA, vB) 1729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bgt 1f @ branch to 1 if comparison failed 1730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ yes, do periodic checks 1733ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1: 1734ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1735ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1736ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1737ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng b common_testUpdateProfile 1738ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1739ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1742ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQZ: /* 0x38 */ 1749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_EQZ.S */ 1750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */ 1751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 1760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vAA 1761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ compare (vA, 0) 1763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f @ branch to 1 if comparison failed 1764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1767ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1: 1768ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1769ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1770ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1771ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 1772ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 1773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1775ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1776ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1777ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) @ extract opcode from rINST 1778ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) @ jump to next instruction 1779ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NEZ: /* 0x39 */ 1786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_NEZ.S */ 1787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */ 1788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 1797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vAA 1798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ compare (vA, 0) 1800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq 1f @ branch to 1 if comparison failed 1801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1804ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1: 1805ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1806ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1807ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1808ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 1809ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 1810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1812ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1813ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1814ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) @ extract opcode from rINST 1815ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) @ jump to next instruction 1816ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LTZ: /* 0x3a */ 1823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_LTZ.S */ 1824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */ 1825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 1834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vAA 1835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ compare (vA, 0) 1837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bge 1f @ branch to 1 if comparison failed 1838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1841ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1: 1842ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1843ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1844ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1845ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 1846ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 1847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1849ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1850ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1851ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) @ extract opcode from rINST 1852ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) @ jump to next instruction 1853ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GEZ: /* 0x3b */ 1860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_GEZ.S */ 1861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */ 1862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 1871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vAA 1872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ compare (vA, 0) 1874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blt 1f @ branch to 1 if comparison failed 1875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1878ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1: 1879ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1880ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1881ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1882ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 1883ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 1884ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) @ extract opcode from rINST 1885ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) @ jump to next instruction 1886ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1887ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1890ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GTZ: /* 0x3c */ 1897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_GTZ.S */ 1898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */ 1899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 1908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vAA 1909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ compare (vA, 0) 1911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ble 1f @ branch to 1 if comparison failed 1912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1915ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1: 1916ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1917ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1918ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1919ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 1920ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 1921ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) @ extract opcode from rINST 1922ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) @ jump to next instruction 1923ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1924ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1927ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LEZ: /* 0x3d */ 1934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_LEZ.S */ 1935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */ 1936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 1945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vAA 1946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ compare (vA, 0) 1948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bgt 1f @ branch to 1 if comparison failed 1949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1952ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1: 1953ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 1954ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 1955ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1956ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 1957ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 1958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1960ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 1961ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1962ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) @ extract opcode from rINST 1963ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) @ jump to next instruction 1964ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 1965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3E: /* 0x3e */ 1971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_3E.S */ 1972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 1973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 1974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3F: /* 0x3f */ 1980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_3F.S */ 1981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 1982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 1983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_40: /* 0x40 */ 1989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_40.S */ 1990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 1991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 1992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_41: /* 0x41 */ 1998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_41.S */ 1999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 2000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 2001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_42: /* 0x42 */ 2007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_42.S */ 2008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 2009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 2010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_43: /* 0x43 */ 2016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_43.S */ 2017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 2018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 2019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET: /* 0x44 */ 2025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */ 2026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #2 @ r0<- arrayObj + index*width 2044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC] 2048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r9) @ vAA<- r2 2050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_WIDE: /* 0x45 */ 2056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_WIDE.S */ 2057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 64 bits. vAA <- vBB[vCC]. 2059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Arrays of long/double are 64-bit aligned, so it's okay to use LDRD. 2061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* aget-wide vAA, vBB, vCC */ 2063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 2064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 2066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 2067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #3 @ r0<- arrayObj + index*width 2073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_AGET_WIDE_finish @ okay, continue below 2075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errArrayIndex @ index >= length, bail 2076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ May want to swap the order of these two branches depending on how the 2077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ branch prediction (if any) handles conditional forward branches vs. 2078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ unconditional forward branches. 2079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_OBJECT: /* 0x46 */ 2083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_OBJECT.S */ 2084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */ 2085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #2 @ r0<- arrayObj + index*width 2103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC] 2107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r9) @ vAA<- r2 2109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BOOLEAN: /* 0x47 */ 2116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_BOOLEAN.S */ 2117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */ 2118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #0 @ r0<- arrayObj + index*width 2136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC] 2140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r9) @ vAA<- r2 2142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BYTE: /* 0x48 */ 2149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_BYTE.S */ 2150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */ 2151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #0 @ r0<- arrayObj + index*width 2169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrsb r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC] 2173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r9) @ vAA<- r2 2175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_CHAR: /* 0x49 */ 2182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_CHAR.S */ 2183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */ 2184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #1 @ r0<- arrayObj + index*width 2202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrh r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC] 2206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r9) @ vAA<- r2 2208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_SHORT: /* 0x4a */ 2215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_SHORT.S */ 2216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */ 2217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #1 @ r0<- arrayObj + index*width 2235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrsh r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC] 2239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r9) @ vAA<- r2 2241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT: /* 0x4b */ 2248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */ 2249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA. 2251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-boolean, aput-byte, aput-char, aput-short 2256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #2 @ r0<- arrayObj + index*width 2267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r9) @ r2<- vAA 2271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2 2273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_WIDE: /* 0x4c */ 2279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_WIDE.S */ 2280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 64 bits. vBB[vCC] <- vAA. 2282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Arrays of long/double are 64-bit aligned, so it's okay to use STRD. 2284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* aput-wide vAA, vBB, vCC */ 2286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 2287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 2289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 2290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #3 @ r0<- arrayObj + index*width 2296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 2298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_APUT_WIDE_finish @ okay, continue below 2299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errArrayIndex @ index >= length, bail 2300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ May want to swap the order of these two branches depending on how the 2301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ branch prediction (if any) handles conditional forward branches vs. 2302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ unconditional forward branches. 2303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_OBJECT: /* 0x4d */ 2307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_OBJECT.S */ 2308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Store an object into an array. vBB[vCC] <- vAA. 2310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 2316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 2318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 2319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- vBB (array object) 2320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vCC (requested index) 2321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ null array object? 2322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r9) @ r9<- vAA 2323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r1, #offArrayObject_length] @ r3<- arrayObj->length 2325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r10, r1, r0, lsl #2 @ r10<- arrayObj + index*width 2326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, r3 @ compare unsigned index, length 2327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_APUT_OBJECT_finish @ we're okay, continue on 2328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errArrayIndex @ index >= length, bail 2329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BOOLEAN: /* 0x4e */ 2334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_BOOLEAN.S */ 2335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */ 2336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA. 2338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-boolean, aput-byte, aput-char, aput-short 2343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #0 @ r0<- arrayObj + index*width 2354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r9) @ r2<- vAA 2358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project strb r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2 2360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BYTE: /* 0x4f */ 2367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_BYTE.S */ 2368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */ 2369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA. 2371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-boolean, aput-byte, aput-char, aput-short 2376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #0 @ r0<- arrayObj + index*width 2387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r9) @ r2<- vAA 2391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project strb r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2 2393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_CHAR: /* 0x50 */ 2400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_CHAR.S */ 2401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */ 2402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA. 2404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-boolean, aput-byte, aput-char, aput-short 2409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #1 @ r0<- arrayObj + index*width 2420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r9) @ r2<- vAA 2424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project strh r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2 2426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_SHORT: /* 0x51 */ 2433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_SHORT.S */ 2434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */ 2435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA. 2437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-boolean, aput-byte, aput-char, aput-short 2442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #1 @ r0<- arrayObj + index*width 2453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r9) @ r2<- vAA 2457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project strh r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2 2459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET: /* 0x52 */ 2466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */ 2467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_finish @ no, already resolved 2481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_finish 2487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE: /* 0x53 */ 2492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_WIDE.S */ 2493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Wide 32-bit instance field get. 2495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* iget-wide vA, vB, field@CCCC */ 2497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pResFields 2501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_WIDE_finish @ no, already resolved 2505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_WIDE_finish 2511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT: /* 0x54 */ 2516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_OBJECT.S */ 2517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */ 2518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_OBJECT_finish @ no, already resolved 2532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_OBJECT_finish 2538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BOOLEAN: /* 0x55 */ 2544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_BOOLEAN.S */ 2545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IGET.S" { "load":"ldrb", "sqnum":"1" } 2546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */ 2547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_BOOLEAN_finish @ no, already resolved 2561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_BOOLEAN_finish 2567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BYTE: /* 0x56 */ 2573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_BYTE.S */ 2574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IGET.S" { "load":"ldrsb", "sqnum":"2" } 2575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */ 2576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_BYTE_finish @ no, already resolved 2590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_BYTE_finish 2596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_CHAR: /* 0x57 */ 2602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_CHAR.S */ 2603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IGET.S" { "load":"ldrh", "sqnum":"3" } 2604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */ 2605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_CHAR_finish @ no, already resolved 2619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_CHAR_finish 2625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_SHORT: /* 0x58 */ 2631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_SHORT.S */ 2632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IGET.S" { "load":"ldrsh", "sqnum":"4" } 2633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */ 2634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_SHORT_finish @ no, already resolved 2648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_SHORT_finish 2654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT: /* 0x59 */ 2660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */ 2661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_finish @ no, already resolved 2675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_finish @ yes, finish up 2681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE: /* 0x5a */ 2686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_WIDE.S */ 2687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* iput-wide vA, vB, field@CCCC */ 2688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pResFields 2692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_WIDE_finish @ no, already resolved 2696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_WIDE_finish @ yes, finish up 2702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT: /* 0x5b */ 2707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_OBJECT.S */ 2708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */ 2709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_OBJECT_finish @ no, already resolved 2723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_OBJECT_finish @ yes, finish up 2729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BOOLEAN: /* 0x5c */ 2735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_BOOLEAN.S */ 2736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IPUT.S" { "store":"strb", "sqnum":"1" } 2737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */ 2738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_BOOLEAN_finish @ no, already resolved 2752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_BOOLEAN_finish @ yes, finish up 2758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BYTE: /* 0x5d */ 2764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_BYTE.S */ 2765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IPUT.S" { "store":"strb", "sqnum":"2" } 2766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */ 2767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_BYTE_finish @ no, already resolved 2781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_BYTE_finish @ yes, finish up 2787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_CHAR: /* 0x5e */ 2793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_CHAR.S */ 2794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IPUT.S" { "store":"strh", "sqnum":"3" } 2795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */ 2796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_CHAR_finish @ no, already resolved 2810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_CHAR_finish @ yes, finish up 2816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_SHORT: /* 0x5f */ 2822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_SHORT.S */ 2823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IPUT.S" { "store":"strh", "sqnum":"4" } 2824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */ 2825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_SHORT_finish @ no, already resolved 2839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_SHORT_finish @ yes, finish up 2845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET: /* 0x60 */ 2851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */ 2852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_resolve @ yes, do resolve 2864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_finish: @ field ptr in r0 2865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offStaticField_value] @ r1<- field value 2866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r2) @ fp[AA]<- r1 2869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_WIDE: /* 0x61 */ 2875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_WIDE.S */ 2876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit SGET handler. 2878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* sget-wide vAA, field@BBBB */ 2880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_WIDE_resolve @ yes, do resolve 2886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_finish: 2887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- AA 2888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrd r2, [r0, #offStaticField_value] @ r2/r3<- field value (aligned) 2889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[AA] 2890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r1, {r2-r3} @ vAA/vAA+1<- r2/r3 2892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_OBJECT: /* 0x62 */ 2898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_OBJECT.S */ 2899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */ 2900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_OBJECT_resolve @ yes, do resolve 2912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_finish: @ field ptr in r0 2913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offStaticField_value] @ r1<- field value 2914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r2) @ fp[AA]<- r1 2917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BOOLEAN: /* 0x63 */ 2924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_BOOLEAN.S */ 2925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */ 2926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_BOOLEAN_resolve @ yes, do resolve 2938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_finish: @ field ptr in r0 2939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offStaticField_value] @ r1<- field value 2940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r2) @ fp[AA]<- r1 2943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BYTE: /* 0x64 */ 2950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_BYTE.S */ 2951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */ 2952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_BYTE_resolve @ yes, do resolve 2964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_finish: @ field ptr in r0 2965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offStaticField_value] @ r1<- field value 2966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r2) @ fp[AA]<- r1 2969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_CHAR: /* 0x65 */ 2976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_CHAR.S */ 2977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */ 2978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_CHAR_resolve @ yes, do resolve 2990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_finish: @ field ptr in r0 2991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offStaticField_value] @ r1<- field value 2992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r2) @ fp[AA]<- r1 2995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_SHORT: /* 0x66 */ 3002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_SHORT.S */ 3003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */ 3004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 3006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 3008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 3010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 3011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 3012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 3013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 3014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 3015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_SHORT_resolve @ yes, do resolve 3016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_finish: @ field ptr in r0 3017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offStaticField_value] @ r1<- field value 3018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 3019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 3020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r2) @ fp[AA]<- r1 3021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT: /* 0x67 */ 3028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */ 3029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 3031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 3033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 3035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 3036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 3037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 3038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 3039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 3040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_resolve @ yes, do resolve 3041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_finish: @ field ptr in r0 3042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 3043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 3044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- fp[AA] 3045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offStaticField_value] @ field<- vAA 3047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_WIDE: /* 0x68 */ 3052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_WIDE.S */ 3053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit SPUT handler. 3055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* sput-wide vAA, field@BBBB */ 3057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 3058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 3059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 3060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 3061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 3062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 3063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 3064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_WIDE_resolve @ yes, do resolve 3065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_WIDE_finish: @ field ptr in r0, AA in r9 3066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 3067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r2-r3} @ r2/r3<- vAA/vAA+1 3068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project strd r2, [r0, #offStaticField_value] @ field<- vAA/vAA+1 3070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_OBJECT: /* 0x69 */ 3075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_OBJECT.S */ 3076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */ 3077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 3079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 3081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 3083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 3084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 3085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 3086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 3087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 3088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_OBJECT_resolve @ yes, do resolve 3089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_OBJECT_finish: @ field ptr in r0 3090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 3091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 3092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- fp[AA] 3093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offStaticField_value] @ field<- vAA 3095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BOOLEAN: /* 0x6a */ 3101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_BOOLEAN.S */ 3102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */ 3103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 3105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 3107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 3109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 3110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 3111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 3112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 3113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 3114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_BOOLEAN_resolve @ yes, do resolve 3115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_finish: @ field ptr in r0 3116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 3117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 3118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- fp[AA] 3119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offStaticField_value] @ field<- vAA 3121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BYTE: /* 0x6b */ 3127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_BYTE.S */ 3128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */ 3129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 3131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 3133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 3135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 3136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 3137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 3138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 3139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 3140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_BYTE_resolve @ yes, do resolve 3141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_finish: @ field ptr in r0 3142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 3143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 3144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- fp[AA] 3145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offStaticField_value] @ field<- vAA 3147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_CHAR: /* 0x6c */ 3153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_CHAR.S */ 3154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */ 3155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 3157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 3159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 3161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 3162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 3163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 3164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 3165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 3166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_CHAR_resolve @ yes, do resolve 3167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_finish: @ field ptr in r0 3168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 3169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 3170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- fp[AA] 3171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offStaticField_value] @ field<- vAA 3173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_SHORT: /* 0x6d */ 3179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_SHORT.S */ 3180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */ 3181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 3183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 3185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 3187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 3188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 3189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 3190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 3191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 3192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_SHORT_resolve @ yes, do resolve 3193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_finish: @ field ptr in r0 3194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 3195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 3196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- fp[AA] 3197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offStaticField_value] @ field<- vAA 3199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL: /* 0x6e */ 3205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL.S */ 3206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 3208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 3210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 3217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved baseMethod 3218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 3220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_VIRTUAL_continue @ yes, continue on 3224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 3225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 3226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_VIRTUAL @ resolver method type 3227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 3228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 3229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_VIRTUAL_continue @ no, continue 3230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 3231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER: /* 0x6f */ 3235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER.S */ 3236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 3238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 3240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 3244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 3247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r10) @ r2<- "this" ptr 3251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved baseMethod 3252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ null "this"? 3253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [rGLUE, #offGlue_method] @ r9<- current method 3254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null "this", throw exception 3255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [r9, #offMethod_clazz] @ r9<- method->clazz 3257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_SUPER_continue @ resolved, continue on 3259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_INVOKE_SUPER_resolve @ do resolve now 3260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT: /* 0x70 */ 3264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_DIRECT.S */ 3265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 3267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 3269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 3270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 3271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 3272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/range 3274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 3281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved methodToCall 3282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 3284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r10) @ r2<- "this" ptr 3288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_INVOKE_DIRECT_resolve @ not resolved, do it now 3289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_finish: 3290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ null "this" ref? 3291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_invokeMethodNoRange @ no, continue on 3292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errNullObject @ yes, throw exception 3293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC: /* 0x71 */ 3297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_STATIC.S */ 3298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 3300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 3302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved methodToCall 3309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_invokeMethodNoRange @ yes, continue on 3312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project0: ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 3313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 3314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_STATIC @ resolver method type 3315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 3316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 3317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_invokeMethodNoRange @ no, continue 3318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 3319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE: /* 0x72 */ 3324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_INTERFACE.S */ 3325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 3327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 3329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r2, 2) @ r2<- FEDC or CCCC 3333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- C (or stays CCCC) 3336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- first arg ("this") 3339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- methodClassDex 3340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null obj? 3341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- method 3342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, fail 3343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offObject_clazz] @ r0<- thisPtr->clazz 3344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmFindInterfaceMethodInCache @ r0<- call(class, ref, method, dex) 3345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 3346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 3347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_invokeMethodNoRange @ jump to common handler 3348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_73: /* 0x73 */ 3353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_73.S */ 3354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 3355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 3356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_RANGE: /* 0x74 */ 3362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL_RANGE.S */ 3363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL.S */ 3364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 3366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 3368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 3375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved baseMethod 3376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 3378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_VIRTUAL_RANGE_continue @ yes, continue on 3382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 3383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 3384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_VIRTUAL @ resolver method type 3385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 3386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 3387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_VIRTUAL_RANGE_continue @ no, continue 3388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 3389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_RANGE: /* 0x75 */ 3394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER_RANGE.S */ 3395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER.S */ 3396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 3398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 3400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 3404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 3407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r10) @ r2<- "this" ptr 3411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved baseMethod 3412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ null "this"? 3413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [rGLUE, #offGlue_method] @ r9<- current method 3414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null "this", throw exception 3415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [r9, #offMethod_clazz] @ r9<- method->clazz 3417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_SUPER_RANGE_continue @ resolved, continue on 3419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_INVOKE_SUPER_RANGE_resolve @ do resolve now 3420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_RANGE: /* 0x76 */ 3425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_DIRECT_RANGE.S */ 3426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_DIRECT.S */ 3427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 3429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 3431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 3432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 3433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 3434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/range 3436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 3443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved methodToCall 3444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 3446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r10) @ r2<- "this" ptr 3450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_INVOKE_DIRECT_RANGE_resolve @ not resolved, do it now 3451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_finish: 3452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ null "this" ref? 3453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_invokeMethodRange @ no, continue on 3454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errNullObject @ yes, throw exception 3455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC_RANGE: /* 0x77 */ 3460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_STATIC_RANGE.S */ 3461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_STATIC.S */ 3462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 3464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 3466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved methodToCall 3473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_invokeMethodRange @ yes, continue on 3476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project0: ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 3477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 3478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_STATIC @ resolver method type 3479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 3480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 3481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_invokeMethodRange @ no, continue 3482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 3483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE_RANGE: /* 0x78 */ 3489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_INTERFACE_RANGE.S */ 3490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_INTERFACE.S */ 3491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 3493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 3495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r2, 2) @ r2<- FEDC or CCCC 3499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- C (or stays CCCC) 3502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- first arg ("this") 3505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- methodClassDex 3506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null obj? 3507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- method 3508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, fail 3509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offObject_clazz] @ r0<- thisPtr->clazz 3510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmFindInterfaceMethodInCache @ r0<- call(class, ref, method, dex) 3511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 3512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 3513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_invokeMethodRange @ jump to common handler 3514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_79: /* 0x79 */ 3520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_79.S */ 3521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 3522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 3523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_7A: /* 0x7a */ 3529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_7A.S */ 3530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 3531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 3532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_INT: /* 0x7b */ 3538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEG_INT.S */ 3539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 3540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 3543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 3546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 3547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r0, r0, #0 @ r0<- op, r0-r3 changed 3556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 3558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 3560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_INT: /* 0x7c */ 3565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NOT_INT.S */ 3566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 3567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 3570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 3573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 3574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r0, r0 @ r0<- op, r0-r3 changed 3583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 3585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 3587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_LONG: /* 0x7d */ 3592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEG_LONG.S */ 3593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */ 3594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit unary operation. Provide an "instr" line that 3596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0/r1". 3597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: neg-long, not-long, neg-double, long-to-double, double-to-long 3600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 3606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vAA 3608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsbs r0, r0, #0 @ optional op; may set condition codes 3610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsc r1, r1, #0 @ r0/r1<- op, r2-r3 changed 3611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA<- r0/r1 3613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-13 instructions */ 3615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_LONG: /* 0x7e */ 3621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NOT_LONG.S */ 3622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */ 3623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit unary operation. Provide an "instr" line that 3625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0/r1". 3626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: neg-long, not-long, neg-double, long-to-double, double-to-long 3629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 3635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vAA 3637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r0, r0 @ optional op; may set condition codes 3639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r1, r1 @ r0/r1<- op, r2-r3 changed 3640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA<- r0/r1 3642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-13 instructions */ 3644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_FLOAT: /* 0x7f */ 3650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEG_FLOAT.S */ 3651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 3652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 3655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 3658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 3659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, #0x80000000 @ r0<- op, r0-r3 changed 3668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 3670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 3672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_DOUBLE: /* 0x80 */ 3677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEG_DOUBLE.S */ 3678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */ 3679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit unary operation. Provide an "instr" line that 3681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0/r1". 3682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: neg-long, not-long, neg-double, long-to-double, double-to-long 3685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 3691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vAA 3693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, r1, #0x80000000 @ r0/r1<- op, r2-r3 changed 3696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA<- r0/r1 3698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-13 instructions */ 3700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_LONG: /* 0x81 */ 3706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_LONG.S */ 3707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWider.S */ 3708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32bit-to-64bit unary operation. Provide an "instr" line 3710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0", where 3711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 64-bit quantity in r0/r1. 3712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: int-to-long, int-to-double, float-to-long, float-to-double 3714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0, asr #31 @ r0<- op, r0-r3 changed 3724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vA/vA+1<- r0/r1 3726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 3728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_FLOAT: /* 0x82 */ 3733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_FLOAT.S */ 3734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 3735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 3738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 3741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 3742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_i2f @ r0<- op, r0-r3 changed 3751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 3753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 3755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_DOUBLE: /* 0x83 */ 3760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_DOUBLE.S */ 3761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWider.S */ 3762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32bit-to-64bit unary operation. Provide an "instr" line 3764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0", where 3765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 64-bit quantity in r0/r1. 3766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: int-to-long, int-to-double, float-to-long, float-to-double 3768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_i2d @ r0<- op, r0-r3 changed 3778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vA/vA+1<- r0/r1 3780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 3782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_INT: /* 0x84 */ 3787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_LONG_TO_INT.S */ 3788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* we ignore the high word, making this equivalent to a 32-bit reg move */ 3789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE.S */ 3790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 3791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 3792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B from 15:12 3793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A from 11:8 3794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[B] 3796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 3797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 3798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[A]<- r2 3799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute next instruction 3800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_FLOAT: /* 0x85 */ 3806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_LONG_TO_FLOAT.S */ 3807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopNarrower.S */ 3808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64bit-to-32bit unary operation. Provide an "instr" line 3810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0/r1", where 3811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 32-bit quantity in r0. 3812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: long-to-float, double-to-int, double-to-float 3814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (This would work for long-to-int, but that instruction is actually 3816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an exact match for OP_MOVE.) 3817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 3822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vB/vB+1 3824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_l2f @ r0<- op, r0-r3 changed 3827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vA<- r0 3829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 3831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_DOUBLE: /* 0x86 */ 3836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_LONG_TO_DOUBLE.S */ 3837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */ 3838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit unary operation. Provide an "instr" line that 3840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0/r1". 3841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: neg-long, not-long, neg-double, long-to-double, double-to-long 3844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 3850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vAA 3852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_l2d @ r0/r1<- op, r2-r3 changed 3855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA<- r0/r1 3857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-13 instructions */ 3859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_INT: /* 0x87 */ 3865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FLOAT_TO_INT.S */ 3866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI appears to have Java-style conversions of +inf/-inf/NaN */ 3867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 3868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 3871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 3874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 3875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_f2iz @ r0<- op, r0-r3 changed 3884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 3886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 3888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if 0 3891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/unop.S" {"instr":"bl f2i_doconv"} 3892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@break 3893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 3894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert the float in r0 to an int in r0. 3895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We have to clip values to int min/max per the specification. The 3897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected common case is a "reasonable" value that converts directly 3898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to modest integer. The EABI convert function isn't doing this for us. 3899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectf2i_doconv: 3901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r4, lr} 3902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0x4f000000 @ (float)maxint 3903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r4, r0 3904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpge @ is arg >= maxint? 3905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 3906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r0, #0x80000000 @ return maxint (7fffffff) 3907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmnefd sp!, {r4, pc} 3908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 3910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0xcf000000 @ (float)minint 3911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmple @ is arg <= minint? 3912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 3913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r0, #0x80000000 @ return minint (80000000) 3914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmnefd sp!, {r4, pc} 3915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 3917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r4 3918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpeq @ is arg == self? 3919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ zero == no 3920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmeqfd sp!, {r4, pc} @ return zero for NaN 3921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 3923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_f2iz @ convert float to int 3924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r4, pc} 3925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 3926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_LONG: /* 0x88 */ 3931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FLOAT_TO_LONG.S */ 3932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/unopWider.S" {"instr":"bl __aeabi_f2lz"} 3933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWider.S */ 3934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32bit-to-64bit unary operation. Provide an "instr" line 3936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0", where 3937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 64-bit quantity in r0/r1. 3938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: int-to-long, int-to-double, float-to-long, float-to-double 3940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl f2l_doconv @ r0<- op, r0-r3 changed 3950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vA/vA+1<- r0/r1 3952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 3954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_DOUBLE: /* 0x89 */ 3960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FLOAT_TO_DOUBLE.S */ 3961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWider.S */ 3962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32bit-to-64bit unary operation. Provide an "instr" line 3964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0", where 3965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 64-bit quantity in r0/r1. 3966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: int-to-long, int-to-double, float-to-long, float-to-double 3968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_f2d @ r0<- op, r0-r3 changed 3978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vA/vA+1<- r0/r1 3980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 3982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_INT: /* 0x8a */ 3987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DOUBLE_TO_INT.S */ 3988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI appears to have Java-style conversions of +inf/-inf/NaN */ 3989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopNarrower.S */ 3990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64bit-to-32bit unary operation. Provide an "instr" line 3992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0/r1", where 3993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 32-bit quantity in r0. 3994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: long-to-float, double-to-int, double-to-float 3996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (This would work for long-to-int, but that instruction is actually 3998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an exact match for OP_MOVE.) 3999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 4001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 4002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 4003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 4004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 4005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vB/vB+1 4006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 4007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_d2iz @ r0<- op, r0-r3 changed 4009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vA<- r0 4011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 4013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if 0 4016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/unopNarrower.S" {"instr":"bl d2i_doconv"} 4017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@break 4018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 4019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert the double in r0/r1 to an int in r0. 4020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We have to clip values to int min/max per the specification. The 4022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected common case is a "reasonable" value that converts directly 4023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to modest integer. The EABI convert function isn't doing this for us. 4024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectd2i_doconv: 4026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r4, r5, lr} @ save regs 4027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, .LOP_DOUBLE_TO_INT_maxlo @ (double)maxint, lo 4028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, .LOP_DOUBLE_TO_INT_maxhi @ (double)maxint, hi 4029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub sp, sp, #4 @ align for EABI 4030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r4, r0 @ save r0 4031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r5, r1 @ and r1 4032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dcmpge @ is arg >= maxint? 4033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 4034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r0, #0x80000000 @ return maxint (7fffffff) 4035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f 4036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 4038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r5 4039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, .LOP_DOUBLE_TO_INT_min @ (double)minint, hi 4040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ (double)minint, lo 4041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dcmple @ is arg <= minint? 4042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 4043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r0, #0x80000000 @ return minint (80000000) 4044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f 4045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 4047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r5 4048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, r4 @ compare against self 4049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r5 4050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dcmpeq @ is arg == self? 4051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ zero == no 4052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq 1f @ return zero for NaN 4053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 4055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r5 4056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_d2iz @ convert double to int 4057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 4059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add sp, sp, #4 4060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r4, r5, pc} 4061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_maxlo: 4063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word 0xffc00000 @ maxint, as a double (low word) 4064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_maxhi: 4065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word 0x41dfffff @ maxint, as a double (high word) 4066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_min: 4067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word 0xc1e00000 @ minint, as a double (high word) 4068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 4069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_LONG: /* 0x8b */ 4074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DOUBLE_TO_LONG.S */ 4075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/unopWide.S" {"instr":"bl __aeabi_d2lz"} 4076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */ 4077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit unary operation. Provide an "instr" line that 4079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0/r1". 4080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 4081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: neg-long, not-long, neg-double, long-to-double, double-to-long 4083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 4085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 4086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 4087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 4088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 4089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 4090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vAA 4091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 4092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl d2l_doconv @ r0/r1<- op, r2-r3 changed 4094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA<- r0/r1 4096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-13 instructions */ 4098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_FLOAT: /* 0x8c */ 4105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DOUBLE_TO_FLOAT.S */ 4106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopNarrower.S */ 4107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64bit-to-32bit unary operation. Provide an "instr" line 4109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0/r1", where 4110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 32-bit quantity in r0. 4111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: long-to-float, double-to-int, double-to-float 4113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (This would work for long-to-int, but that instruction is actually 4115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an exact match for OP_MOVE.) 4116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 4118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 4119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 4120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 4121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 4122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vB/vB+1 4123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 4124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_d2f @ r0<- op, r0-r3 changed 4126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vA<- r0 4128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 4130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_BYTE: /* 0x8d */ 4135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_BYTE.S */ 4136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 4137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 4139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 4140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 4141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 4143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 4144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 4146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 4147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 4148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 4149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 4150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl #24 @ optional op; may set condition codes 4151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 4152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asr #24 @ r0<- op, r0-r3 changed 4153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 4157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_CHAR: /* 0x8e */ 4162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_CHAR.S */ 4163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 4164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 4166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 4167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 4168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 4170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 4171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 4173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 4174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 4175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 4176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 4177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl #16 @ optional op; may set condition codes 4178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 4179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr #16 @ r0<- op, r0-r3 changed 4180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 4184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_SHORT: /* 0x8f */ 4189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_SHORT.S */ 4190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 4191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 4193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 4194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 4195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 4197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 4198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 4200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 4201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 4202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 4203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 4204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl #16 @ optional op; may set condition codes 4205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 4206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asr #16 @ r0<- op, r0-r3 changed 4207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 4211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT: /* 0x90 */ 4216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_INT.S */ 4217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1 @ r0<- op, r0-r3 changed 4248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT: /* 0x91 */ 4258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_INT.S */ 4259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r0, r0, r1 @ r0<- op, r0-r3 changed 4290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT: /* 0x92 */ 4300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_INT.S */ 4301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */ 4302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mul r0, r1, r0 @ r0<- op, r0-r3 changed 4333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT: /* 0x93 */ 4343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_INT.S */ 4344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 4368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idiv @ r0<- op, r0-r3 changed 4375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT: /* 0x94 */ 4385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_INT.S */ 4386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* idivmod returns quotient in r0 and remainder in r1 */ 4387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 4411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idivmod @ r1<- op, r0-r3 changed 4418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r9) @ vAA<- r1 4420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT: /* 0x95 */ 4428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_INT.S */ 4429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, r1 @ r0<- op, r0-r3 changed 4460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT: /* 0x96 */ 4470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_INT.S */ 4471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1 @ r0<- op, r0-r3 changed 4502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT: /* 0x97 */ 4512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_INT.S */ 4513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r0, r0, r1 @ r0<- op, r0-r3 changed 4544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT: /* 0x98 */ 4554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_INT.S */ 4555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 4585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl r1 @ r0<- op, r0-r3 changed 4586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT: /* 0x99 */ 4596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_INT.S */ 4597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 4627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asr r1 @ r0<- op, r0-r3 changed 4628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT: /* 0x9a */ 4638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_INT.S */ 4639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 4669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r1 @ r0<- op, r0-r3 changed 4670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG: /* 0x9b */ 4680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_LONG.S */ 4681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 4692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 4693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 4694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 4696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 4709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adds r0, r0, r2 @ optional op; may set condition codes 4714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adc r1, r1, r3 @ result<- op, r0-r3 changed 4715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 4717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 4719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG: /* 0x9c */ 4725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_LONG.S */ 4726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 4737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 4738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 4739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 4741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 4754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r0, r0, r2 @ optional op; may set condition codes 4759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbc r1, r1, r3 @ result<- op, r0-r3 changed 4760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 4762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 4764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG: /* 0x9d */ 4770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_LONG.S */ 4771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply. 4773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Consider WXxYZ (r1r0 x r3r2) with a long multiply: 4775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WX 4776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * x YZ 4777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * -------- 4778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ZW ZX 4779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * YW YX 4780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The low word of the result holds ZX, the high word holds 4782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (ZW+YX) + (the high overflow from ZX). YW doesn't matter because 4783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * it doesn't fit in the low 64 bits. 4784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlike most ARM math operations, multiply instructions have 4786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * restrictions on using the same register more than once (Rd and Rm 4787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * cannot be the same). 4788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long vAA, vBB, vCC */ 4790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mul ip, r2, r1 @ ip<- ZxW 4798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project umull r9, r10, r2, r0 @ r9/r10 <- ZxX 4799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mla r2, r0, r3, ip @ r2<- YxX + (ZxW) 4800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 4801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r10, r2, r10 @ r10<- r10 + low(ZxW + (YxX)) 4802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, rFP, r0, lsl #2 @ r0<- &fp[AA] 4803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_MUL_LONG_finish 4805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG: /* 0x9e */ 4809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_LONG.S */ 4810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 4821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 4822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 4823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 4825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 4837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 4838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_ldivmod @ result<- op, r0-r3 changed 4844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 4846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 4848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG: /* 0x9f */ 4854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_LONG.S */ 4855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ldivmod returns quotient in r0/r1 and remainder in r2/r3 */ 4856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 4867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 4868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 4869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 4871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 4883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 4884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_ldivmod @ result<- op, r0-r3 changed 4890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r2,r3} @ vAA/vAA+1<- r2/r3 4892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 4894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG: /* 0xa0 */ 4900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_LONG.S */ 4901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 4912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 4913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 4914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 4916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 4929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, r2 @ optional op; may set condition codes 4934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, r3 @ result<- op, r0-r3 changed 4935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 4937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 4939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG: /* 0xa1 */ 4945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_LONG.S */ 4946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 4957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 4958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 4959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 4961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 4974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r2 @ optional op; may set condition codes 4979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r1, r3 @ result<- op, r0-r3 changed 4980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 4982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 4984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG: /* 0xa2 */ 4990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_LONG.S */ 4991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 5002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 5003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 5004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 5006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 5014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 5015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 5016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 5017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r0, r0, r2 @ optional op; may set condition codes 5024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r1, r1, r3 @ result<- op, r0-r3 changed 5025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 5029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG: /* 0xa3 */ 5035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_LONG.S */ 5036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 5038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 5039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 5040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. 5041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long vAA, vBB, vCC */ 5043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r3, r0, #255 @ r3<- BB 5046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr #8 @ r0<- CC 5047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[BB] 5048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vCC 5049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vBB/vBB+1 5050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #63 @ r2<- r2 & 0x3f 5051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, asl r2 @ r1<- r1 << r2 5054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r3, r2, #32 @ r3<- 32 - r2 5055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r1, r0, lsr r3 @ r1<- r1 | (r0 << (32-r2)) 5056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs ip, r2, #32 @ ip<- r2 - 32 5057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movpl r1, r0, asl ip @ if r2 >= 32, r1<- r0 << (r2-32) 5058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_SHL_LONG_finish 5060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG: /* 0xa4 */ 5064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_LONG.S */ 5065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 5067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 5068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 5069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. 5070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long vAA, vBB, vCC */ 5072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r3, r0, #255 @ r3<- BB 5075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr #8 @ r0<- CC 5076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[BB] 5077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vCC 5078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vBB/vBB+1 5079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #63 @ r0<- r0 & 0x3f 5080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r2 @ r0<- r2 >> r2 5083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r3, r2, #32 @ r3<- 32 - r2 5084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, asl r3 @ r0<- r0 | (r1 << (32-r2)) 5085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs ip, r2, #32 @ ip<- r2 - 32 5086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movpl r0, r1, asr ip @ if r2 >= 32, r0<-r1 >> (r2-32) 5087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_SHR_LONG_finish 5089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG: /* 0xa5 */ 5093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_LONG.S */ 5094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 5096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 5097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 5098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. 5099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ushr-long vAA, vBB, vCC */ 5101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r3, r0, #255 @ r3<- BB 5104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr #8 @ r0<- CC 5105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[BB] 5106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vCC 5107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vBB/vBB+1 5108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #63 @ r0<- r0 & 0x3f 5109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r2 @ r0<- r2 >> r2 5112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r3, r2, #32 @ r3<- 32 - r2 5113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, asl r3 @ r0<- r0 | (r1 << (32-r2)) 5114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs ip, r2, #32 @ ip<- r2 - 32 5115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movpl r0, r1, lsr ip @ if r2 >= 32, r0<-r1 >>> (r2-32) 5116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_USHR_LONG_finish 5118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT: /* 0xa6 */ 5122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_FLOAT.S */ 5123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 5124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 5126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 5127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 5132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 5133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 5134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 5136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 5137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 5138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 5145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 5146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fadd @ r0<- op, r0-r3 changed 5154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 5158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT: /* 0xa7 */ 5164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_FLOAT.S */ 5165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 5166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 5168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 5169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 5174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 5175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 5176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 5178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 5179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 5180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 5187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 5188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fsub @ r0<- op, r0-r3 changed 5196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 5200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT: /* 0xa8 */ 5206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_FLOAT.S */ 5207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 5208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 5210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 5211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 5216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 5217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 5218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 5220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 5221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 5222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 5229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 5230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fmul @ r0<- op, r0-r3 changed 5238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 5242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT: /* 0xa9 */ 5248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_FLOAT.S */ 5249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 5250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 5252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 5253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 5258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 5259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 5260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 5262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 5263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 5264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 5271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 5272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fdiv @ r0<- op, r0-r3 changed 5280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 5284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT: /* 0xaa */ 5290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_FLOAT.S */ 5291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI doesn't define a float remainder function, but libm does */ 5292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 5293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 5295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 5296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 5301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 5302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 5303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 5305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 5306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 5307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 5314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 5315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl fmodf @ r0<- op, r0-r3 changed 5323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 5327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE: /* 0xab */ 5333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_DOUBLE.S */ 5334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 5335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 5337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 5338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 5345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 5346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 5347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 5349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 5357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 5358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 5359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 5360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dadd @ result<- op, r0-r3 changed 5368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 5372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE: /* 0xac */ 5378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_DOUBLE.S */ 5379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 5380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 5382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 5383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 5390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 5391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 5392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 5394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 5402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 5403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 5404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 5405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dsub @ result<- op, r0-r3 changed 5413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 5417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE: /* 0xad */ 5423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_DOUBLE.S */ 5424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 5425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 5427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 5428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 5435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 5436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 5437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 5439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 5447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 5448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 5449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 5450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dmul @ result<- op, r0-r3 changed 5458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 5462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE: /* 0xae */ 5468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_DOUBLE.S */ 5469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 5470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 5472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 5473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 5480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 5481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 5482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 5484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 5492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 5493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 5494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 5495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_ddiv @ result<- op, r0-r3 changed 5503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 5507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE: /* 0xaf */ 5513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_DOUBLE.S */ 5514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI doesn't define a double remainder function, but libm does */ 5515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 5516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 5518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 5519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 5526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 5527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 5528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 5530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 5538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 5539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 5540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 5541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl fmod @ result<- op, r0-r3 changed 5549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 5553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_2ADDR: /* 0xb0 */ 5559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_INT_2ADDR.S */ 5560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1 @ r0<- op, r0-r3 changed 5589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT_2ADDR: /* 0xb1 */ 5599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_INT_2ADDR.S */ 5600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r0, r0, r1 @ r0<- op, r0-r3 changed 5629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_2ADDR: /* 0xb2 */ 5639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_INT_2ADDR.S */ 5640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */ 5641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mul r0, r1, r0 @ r0<- op, r0-r3 changed 5670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_2ADDR: /* 0xb3 */ 5680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_INT_2ADDR.S */ 5681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 5703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idiv @ r0<- op, r0-r3 changed 5710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_2ADDR: /* 0xb4 */ 5720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_INT_2ADDR.S */ 5721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* idivmod returns quotient in r0 and remainder in r1 */ 5722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 5744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idivmod @ r1<- op, r0-r3 changed 5751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r9) @ vAA<- r1 5753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_2ADDR: /* 0xb5 */ 5761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_INT_2ADDR.S */ 5762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, r1 @ r0<- op, r0-r3 changed 5791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_2ADDR: /* 0xb6 */ 5801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_INT_2ADDR.S */ 5802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1 @ r0<- op, r0-r3 changed 5831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_2ADDR: /* 0xb7 */ 5841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_INT_2ADDR.S */ 5842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r0, r0, r1 @ r0<- op, r0-r3 changed 5871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_2ADDR: /* 0xb8 */ 5881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_INT_2ADDR.S */ 5882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 5910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl r1 @ r0<- op, r0-r3 changed 5911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_2ADDR: /* 0xb9 */ 5921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_INT_2ADDR.S */ 5922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 5950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asr r1 @ r0<- op, r0-r3 changed 5951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_2ADDR: /* 0xba */ 5961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_INT_2ADDR.S */ 5962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 5990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r1 @ r0<- op, r0-r3 changed 5991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG_2ADDR: /* 0xbb */ 6001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_LONG_2ADDR.S */ 6002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adds r0, r0, r2 @ optional op; may set condition codes 6032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adc r1, r1, r3 @ result<- op, r0-r3 changed 6033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG_2ADDR: /* 0xbc */ 6043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_LONG_2ADDR.S */ 6044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r0, r0, r2 @ optional op; may set condition codes 6074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbc r1, r1, r3 @ result<- op, r0-r3 changed 6075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG_2ADDR: /* 0xbd */ 6085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_LONG_2ADDR.S */ 6086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply, "/2addr" version. 6088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See OP_MUL_LONG for an explanation. 6090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We get a little tight on registers, so to avoid looking up &fp[A] 6092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * again we stuff it into rINST. 6093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long/2addr vA, vB */ 6095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add rINST, rFP, r9, lsl #2 @ rINST<- &fp[A] 6100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia rINST, {r0-r1} @ r0/r1<- vAA/vAA+1 6102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mul ip, r2, r1 @ ip<- ZxW 6103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project umull r9, r10, r2, r0 @ r9/r10 <- ZxX 6104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mla r2, r0, r3, ip @ r2<- YxX + (ZxW) 6105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST @ r0<- &fp[A] (free up rINST) 6106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r10, r2, r10 @ r10<- r10 + low(ZxW + (YxX)) 6108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r0, {r9-r10} @ vAA/vAA+1<- r9/r10 6110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG_2ADDR: /* 0xbe */ 6116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_LONG_2ADDR.S */ 6117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 6141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_ldivmod @ result<- op, r0-r3 changed 6148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG_2ADDR: /* 0xbf */ 6158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_LONG_2ADDR.S */ 6159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ldivmod returns quotient in r0/r1 and remainder in r2/r3 */ 6160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 6184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_ldivmod @ result<- op, r0-r3 changed 6191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r2,r3} @ vAA/vAA+1<- r2/r3 6193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG_2ADDR: /* 0xc0 */ 6201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_LONG_2ADDR.S */ 6202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, r2 @ optional op; may set condition codes 6232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, r3 @ result<- op, r0-r3 changed 6233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG_2ADDR: /* 0xc1 */ 6243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_LONG_2ADDR.S */ 6244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r2 @ optional op; may set condition codes 6274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r1, r3 @ result<- op, r0-r3 changed 6275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG_2ADDR: /* 0xc2 */ 6285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_LONG_2ADDR.S */ 6286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r0, r0, r2 @ optional op; may set condition codes 6316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r1, r1, r3 @ result<- op, r0-r3 changed 6317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG_2ADDR: /* 0xc3 */ 6327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_LONG_2ADDR.S */ 6328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 6330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 6331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 6333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r3) @ r2<- vB 6337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #63 @ r2<- r2 & 0x3f 6339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, asl r2 @ r1<- r1 << r2 6342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r3, r2, #32 @ r3<- 32 - r2 6343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r1, r0, lsr r3 @ r1<- r1 | (r0 << (32-r2)) 6344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs ip, r2, #32 @ ip<- r2 - 32 6345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movpl r1, r0, asl ip @ if r2 >= 32, r1<- r0 << (r2-32) 6347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl r2 @ r0<- r0 << r2 6348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_SHL_LONG_2ADDR_finish 6349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG_2ADDR: /* 0xc4 */ 6353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_LONG_2ADDR.S */ 6354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 6356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 6357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long/2addr vA, vB */ 6359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r3) @ r2<- vB 6363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #63 @ r2<- r2 & 0x3f 6365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r2 @ r0<- r2 >> r2 6368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r3, r2, #32 @ r3<- 32 - r2 6369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, asl r3 @ r0<- r0 | (r1 << (32-r2)) 6370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs ip, r2, #32 @ ip<- r2 - 32 6371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movpl r0, r1, asr ip @ if r2 >= 32, r0<-r1 >> (r2-32) 6373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, asr r2 @ r1<- r1 >> r2 6374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_SHR_LONG_2ADDR_finish 6375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG_2ADDR: /* 0xc5 */ 6379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_LONG_2ADDR.S */ 6380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 6382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 6383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ushr-long/2addr vA, vB */ 6385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r3) @ r2<- vB 6389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #63 @ r2<- r2 & 0x3f 6391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r2 @ r0<- r2 >> r2 6394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r3, r2, #32 @ r3<- 32 - r2 6395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, asl r3 @ r0<- r0 | (r1 << (32-r2)) 6396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs ip, r2, #32 @ ip<- r2 - 32 6397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movpl r0, r1, lsr ip @ if r2 >= 32, r0<-r1 >>> (r2-32) 6399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, lsr r2 @ r1<- r1 >>> r2 6400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_USHR_LONG_2ADDR_finish 6401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT_2ADDR: /* 0xc6 */ 6405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_FLOAT_2ADDR.S */ 6406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 6407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 6409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 6417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 6418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 6419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 6420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 6426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 6427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fadd @ r0<- op, r0-r3 changed 6435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT_2ADDR: /* 0xc7 */ 6445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_FLOAT_2ADDR.S */ 6446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 6447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 6449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 6457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 6458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 6459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 6460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 6466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 6467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fsub @ r0<- op, r0-r3 changed 6475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT_2ADDR: /* 0xc8 */ 6485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_FLOAT_2ADDR.S */ 6486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 6487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 6489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 6497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 6498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 6499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 6500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 6506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 6507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fmul @ r0<- op, r0-r3 changed 6515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT_2ADDR: /* 0xc9 */ 6525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_FLOAT_2ADDR.S */ 6526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 6527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 6529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 6537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 6538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 6539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 6540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 6546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 6547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fdiv @ r0<- op, r0-r3 changed 6555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT_2ADDR: /* 0xca */ 6565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_FLOAT_2ADDR.S */ 6566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI doesn't define a float remainder function, but libm does */ 6567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 6568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 6570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 6578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 6579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 6580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 6581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 6587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 6588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl fmodf @ r0<- op, r0-r3 changed 6596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE_2ADDR: /* 0xcb */ 6606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_DOUBLE_2ADDR.S */ 6607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dadd @ result<- op, r0-r3 changed 6638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE_2ADDR: /* 0xcc */ 6648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_DOUBLE_2ADDR.S */ 6649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dsub @ result<- op, r0-r3 changed 6680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE_2ADDR: /* 0xcd */ 6690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_DOUBLE_2ADDR.S */ 6691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dmul @ result<- op, r0-r3 changed 6722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE_2ADDR: /* 0xce */ 6732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_DOUBLE_2ADDR.S */ 6733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_ddiv @ result<- op, r0-r3 changed 6764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE_2ADDR: /* 0xcf */ 6774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_DOUBLE_2ADDR.S */ 6775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI doesn't define a double remainder function, but libm does */ 6776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl fmod @ result<- op, r0-r3 changed 6807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT16: /* 0xd0 */ 6817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_INT_LIT16.S */ 6818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 6819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 6821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 6829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 6830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 6832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 6833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 6834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 6836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 6842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1 @ r0<- op, r0-r3 changed 6844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT: /* 0xd1 */ 6854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RSUB_INT.S */ 6855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* this op is "rsub-int", but can be thought of as "rsub-int/lit16" */ 6856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 6857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 6859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 6867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 6868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 6870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 6871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 6872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 6874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 6880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r0, r0, r1 @ r0<- op, r0-r3 changed 6882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT16: /* 0xd2 */ 6892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_INT_LIT16.S */ 6893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */ 6894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 6895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 6897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 6905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 6906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 6908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 6909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 6910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 6912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 6918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mul r0, r1, r0 @ r0<- op, r0-r3 changed 6920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT16: /* 0xd3 */ 6930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_INT_LIT16.S */ 6931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 6932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 6934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 6942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 6943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 6945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 6946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 6947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 6949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 6951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 6955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idiv @ r0<- op, r0-r3 changed 6957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT16: /* 0xd4 */ 6967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_INT_LIT16.S */ 6968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* idivmod returns quotient in r0 and remainder in r1 */ 6969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 6970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 6972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 6980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 6981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 6983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 6984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 6985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 6987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 6989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 6993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idivmod @ r1<- op, r0-r3 changed 6995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r9) @ vAA<- r1 6997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT16: /* 0xd5 */ 7005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_INT_LIT16.S */ 7006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 7007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 7009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 7017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 7018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 7020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 7021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 7022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 7023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 7024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 7025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 7027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, r1 @ r0<- op, r0-r3 changed 7032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 7036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT16: /* 0xd6 */ 7042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_INT_LIT16.S */ 7043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 7044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 7046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 7054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 7055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 7057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 7058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 7059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 7060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 7061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 7062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 7064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1 @ r0<- op, r0-r3 changed 7069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 7073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT16: /* 0xd7 */ 7079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_INT_LIT16.S */ 7080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 7081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 7083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 7091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 7092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 7094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 7095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 7096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 7097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 7098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 7099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 7101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r0, r0, r1 @ r0<- op, r0-r3 changed 7106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 7110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT8: /* 0xd8 */ 7116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_INT_LIT8.S */ 7117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1 @ r0<- op, r0-r3 changed 7145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT_LIT8: /* 0xd9 */ 7155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RSUB_INT_LIT8.S */ 7156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r0, r0, r1 @ r0<- op, r0-r3 changed 7184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT8: /* 0xda */ 7194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_INT_LIT8.S */ 7195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */ 7196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mul r0, r1, r0 @ r0<- op, r0-r3 changed 7224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT8: /* 0xdb */ 7234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_INT_LIT8.S */ 7235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 7256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idiv @ r0<- op, r0-r3 changed 7263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT8: /* 0xdc */ 7273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_INT_LIT8.S */ 7274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* idivmod returns quotient in r0 and remainder in r1 */ 7275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 7296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idivmod @ r1<- op, r0-r3 changed 7303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r9) @ vAA<- r1 7305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT8: /* 0xdd */ 7313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_INT_LIT8.S */ 7314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, r1 @ r0<- op, r0-r3 changed 7342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT8: /* 0xde */ 7352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_INT_LIT8.S */ 7353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1 @ r0<- op, r0-r3 changed 7381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT8: /* 0xdf */ 7391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_INT_LIT8.S */ 7392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r0, r0, r1 @ r0<- op, r0-r3 changed 7420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_LIT8: /* 0xe0 */ 7430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_INT_LIT8.S */ 7431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 7458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl r1 @ r0<- op, r0-r3 changed 7459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_LIT8: /* 0xe1 */ 7469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_INT_LIT8.S */ 7470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 7497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asr r1 @ r0<- op, r0-r3 changed 7498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_LIT8: /* 0xe2 */ 7508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_INT_LIT8.S */ 7509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 7536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r1 @ r0<- op, r0-r3 changed 7537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E3: /* 0xe3 */ 7547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E3.S */ 7548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E4: /* 0xe4 */ 7556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E4.S */ 7557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E5: /* 0xe5 */ 7565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E5.S */ 7566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E6: /* 0xe6 */ 7574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E6.S */ 7575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E7: /* 0xe7 */ 7583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E7.S */ 7584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E8: /* 0xe8 */ 7592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E8.S */ 7593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E9: /* 0xe9 */ 7601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E9.S */ 7602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_EA: /* 0xea */ 7610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_EA.S */ 7611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_EB: /* 0xeb */ 7619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_EB.S */ 7620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_EC: /* 0xec */ 7628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_EC.S */ 7629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 76363a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden.L_OP_THROW_VERIFICATION_ERROR: /* 0xed */ 76373a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden/* File: armv5te/OP_THROW_VERIFICATION_ERROR.S */ 76383a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden /* 76393a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden * Handle a throw-verification-error instruction. This throws an 76403a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden * exception for an error discovered during verification. The 76413a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden * exception is indicated by AA, with some detail provided by BBBB. 76423a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden */ 76433a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden /* op AA, ref@BBBB */ 7644b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method 76453a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden FETCH(r2, 1) @ r2<- BBBB 7646b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden EXPORT_PC() @ export the PC 76473a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden mov r1, rINST, lsr #8 @ r1<- AA 76483a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden bl dvmThrowVerificationError @ always throws 76493a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden b common_exceptionThrown @ handle exception 7650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_EXECUTE_INLINE: /* 0xee */ 7655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_EXECUTE_INLINE.S */ 7656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Execute a "native inline" instruction. 7658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We need to call: 7660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * dvmPerformInlineOp4Std(arg0, arg1, arg2, arg3, &retval, ref) 7661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The first four args are in r0-r3, but the last two must be pushed 7663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * onto the stack. 7664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* [opt] execute-inline vAA, {vC, vD, vE, vF}, inline@BBBB */ 7666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 1) @ r10<- BBBB 7667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rGLUE, #offGlue_retval @ r1<- &glue->retval 7668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ can throw 7669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub sp, sp, #8 @ make room for arg(s) 7670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 7671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [sp] @ push &glue->retval 7672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl .LOP_EXECUTE_INLINE_continue @ make call; will return after 7673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add sp, sp, #8 @ pop stack 7674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ test boolean result of inline 7675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ returned false, handle exception 7676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 7677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_EF: /* 0xef */ 7683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_EF.S */ 7684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_EMPTY: /* 0xf0 */ 7692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_DIRECT_EMPTY.S */ 7693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * invoke-direct-empty is a no-op in a "standard" interpreter. 7695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance to next instr, load rINST 7697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 7698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute it 7699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_F1: /* 0xf1 */ 7703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_F1.S */ 7704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_QUICK: /* 0xf2 */ 7712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_QUICK.S */ 7713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-quick */ 7714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 7715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 7716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- object we're operating on 7717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field byte offset 7718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ check object for null 7719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A(+) 7720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 7721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1] @ r0<- obj.field (always 32 bits) 7722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 7724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 7726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE_QUICK: /* 0xf3 */ 7732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_WIDE_QUICK.S */ 7733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* iget-wide-quick vA, vB, offset@CCCC */ 7734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 7735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- object we're operating on 7736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field byte offset 7737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ check object for null 7738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A(+) 7739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 7740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrd r0, [r3, r1] @ r0<- obj.field (64 bits, aligned) 7741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 7742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r2, lsl #2 @ r3<- &fp[A] 7744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r3, {r0-r1} @ fp[A]<- r0/r1 7746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT_QUICK: /* 0xf4 */ 7752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_OBJECT_QUICK.S */ 7753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_QUICK.S */ 7754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-quick */ 7755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 7756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 7757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- object we're operating on 7758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field byte offset 7759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ check object for null 7760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A(+) 7761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 7762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1] @ r0<- obj.field (always 32 bits) 7763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 7765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 7767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_QUICK: /* 0xf5 */ 7774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_QUICK.S */ 7775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iput-quick, iput-object-quick */ 7776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 7777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 7778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- fp[B], the object pointer 7779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field byte offset 7780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ check object for null 7781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A(+) 7782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 7783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 7784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- fp[A] 7785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r3, r1] @ obj.field (always 32 bits)<- r0 7787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE_QUICK: /* 0xf6 */ 7794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_WIDE_QUICK.S */ 7795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* iput-wide-quick vA, vB, offset@CCCC */ 7796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A(+) 7797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 7798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 7799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[B], the object pointer 7800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r0, lsl #2 @ r3<- &fp[A] 7801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ check object for null 7802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- fp[A] 7803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 7804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 1) @ r3<- field byte offset 7805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project strd r0, [r2, r3] @ obj.field (64 bits, aligned)<- r0/r1 7807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT_QUICK: /* 0xf7 */ 7814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_OBJECT_QUICK.S */ 7815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_QUICK.S */ 7816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iput-quick, iput-object-quick */ 7817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 7818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 7819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- fp[B], the object pointer 7820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field byte offset 7821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ check object for null 7822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A(+) 7823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 7824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 7825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- fp[A] 7826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r3, r1] @ obj.field (always 32 bits)<- r0 7828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK: /* 0xf8 */ 7836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL_QUICK.S */ 7837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 7839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 7841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 7843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 7844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 2) @ r3<- FEDC or CCCC 7845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 7846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 7847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r3, r3, #15 @ r3<- C (or stays CCCC) 7848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r3) @ r2<- vC ("this" ptr) 7850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ is "this" null? 7851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null "this", throw exception 7852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offObject_clazz] @ r2<- thisPtr->clazz 7853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_vtable] @ r2<- thisPtr->clazz->vtable 7854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ invoke must export 7855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r3<- vtable[BBBB] 7856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodNoRange @ continue on 7857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK_RANGE: /* 0xf9 */ 7861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL_QUICK_RANGE.S */ 7862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL_QUICK.S */ 7863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 7865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 7867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 7869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 7870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 2) @ r3<- FEDC or CCCC 7871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 7872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 7873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r3, r3, #15 @ r3<- C (or stays CCCC) 7874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r3) @ r2<- vC ("this" ptr) 7876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ is "this" null? 7877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null "this", throw exception 7878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offObject_clazz] @ r2<- thisPtr->clazz 7879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_vtable] @ r2<- thisPtr->clazz->vtable 7880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ invoke must export 7881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r3<- vtable[BBBB] 7882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodRange @ continue on 7883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK: /* 0xfa */ 7888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER_QUICK.S */ 7889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 7891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 7893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 7895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 7896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 7897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 7898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 7899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 7900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 7902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offMethod_clazz] @ r2<- method->clazz 7903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 7904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_super] @ r2<- method->clazz->super 7905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r10) @ r3<- "this" 7906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_vtable] @ r2<- ...clazz->super->vtable 7907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ null "this" ref? 7908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- super->vtable[BBBB] 7909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ "this" is null, throw exception 7910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodNoRange @ continue on 7911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK_RANGE: /* 0xfb */ 7916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER_QUICK_RANGE.S */ 7917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER_QUICK.S */ 7918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 7920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 7922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 7924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 7925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 7926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 7927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 7928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 7929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 7931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offMethod_clazz] @ r2<- method->clazz 7932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 7933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_super] @ r2<- method->clazz->super 7934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r10) @ r3<- "this" 7935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_vtable] @ r2<- ...clazz->super->vtable 7936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ null "this" ref? 7937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- super->vtable[BBBB] 7938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ "this" is null, throw exception 7939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodRange @ continue on 7940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FC: /* 0xfc */ 7946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_FC.S */ 7947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FD: /* 0xfd */ 7955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_FD.S */ 7956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FE: /* 0xfe */ 7964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_FE.S */ 7965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FF: /* 0xff */ 7973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_FF.S */ 7974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size dvmAsmInstructionStart, .-dvmAsmInstructionStart 7982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmInstructionEnd 7983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionEnd: 7984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 7986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 7987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sister implementations 7988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 7989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmSisterStart 7991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmAsmSisterStart, %function 7992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 7993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 4 7994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterStart: 7995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_STRING */ 7997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the String has not yet been resolved. 8000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB (String ref) 8001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9: target register 8002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_STRING_resolve: 8004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method 8006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offMethod_clazz] @ r0<- method->clazz 8007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveString @ r0<- String reference 8008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 8009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yup, handle the exception 8010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 8013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_STRING_JUMBO */ 8017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the String has not yet been resolved. 8020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBBBBBB (String ref) 8021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9: target register 8022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_STRING_JUMBO_resolve: 8024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method 8026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offMethod_clazz] @ r0<- method->clazz 8027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveString @ r0<- String reference 8028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 8029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yup, handle the exception 8030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 8031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 8033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_CLASS */ 8037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the Class has not yet been resolved. 8040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB (Class ref) 8041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9: target register 8042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_CLASS_resolve: 8044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method 8046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #1 @ r2<- true 8047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offMethod_clazz] @ r0<- method->clazz 8048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- Class reference 8049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 8050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yup, handle the exception 8051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 8054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CHECK_CAST */ 8058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 8061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds obj->clazz 8062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 holds class resolved from BBBB 8063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_fullcheck: 8066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmInstanceofNonTrivial @ r0<- boolean result 8067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 8068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_CHECK_CAST_okay @ no, success 8069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ A cast has failed. We need to throw a ClassCastException with the 8071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ class of the object that failed to be cast. 8072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ about to throw 8073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r9, #offObject_clazz] @ r3<- obj->clazz 8074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, .LstrClassCastExceptionPtr 8075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r3, #offClassObject_descriptor] @ r1<- obj->clazz->descriptor 8076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowExceptionWithClassMessage 8077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 8078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 8081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r2 holds BBBB 8083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolve: 8086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 8087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 8088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r2 @ r1<- BBBB 8089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ r2<- false 8090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 8091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- resolved ClassObject ptr 8092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 8093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 8094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0 @ r1<- class resolved from BBB 8095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, #offObject_clazz] @ r0<- obj->clazz 8096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_CHECK_CAST_resolved @ pick up where we left off 8097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrClassCastExceptionPtr: 8099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrClassCastException 8100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INSTANCE_OF */ 8103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 8106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds obj->clazz 8107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 holds class resolved from BBBB 8108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds A 8109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_fullcheck: 8111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmInstanceofNonTrivial @ r0<- boolean result 8112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ fall through to OP_INSTANCE_OF_store 8113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds boolean result 8116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds A 8117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_store: 8119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vA<- r0 8121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test succeeded, save and bail. 8126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds A 8127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_trivial: 8129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, #1 @ indicate success 8130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ could b OP_INSTANCE_OF_store, but copying is faster and cheaper 8131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vA<- r0 8133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 8138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r3 holds BBBB 8140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds A 8141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolve: 8143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 8144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method 8145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r3 @ r1<- BBBB 8146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #1 @ r2<- true 8147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offMethod_clazz] @ r0<- method->clazz 8148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- resolved ClassObject ptr 8149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 8150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 8151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0 @ r1<- class resolved from BBB 8152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 8153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB (object) 8154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offObject_clazz] @ r0<- obj->clazz 8155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_INSTANCE_OF_resolved @ pick up where we left off 8156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_NEW_INSTANCE */ 8159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 32 @ minimize cache lines 8161b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden.LOP_NEW_INSTANCE_finish: @ r0=new object 8162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 8163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 8164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle the exception 8165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r3) @ vAA<- r0 8168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class initialization required. 8172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds class object 8174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_needinit: 8176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r0 @ save r0 8177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmInitClass @ initialize class 8178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ check boolean result 8179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ restore r0 8180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_NEW_INSTANCE_initialized @ success, continue 8181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ failed, deal with init exception 8182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 8185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 holds BBBB 8187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolve: 8189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 8190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ r2<- false 8191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 8192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- resolved ClassObject ptr 8193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 8194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_NEW_INSTANCE_resolved @ no, continue 8195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 8196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInstantiationErrorPtr: 8198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrInstantiationError 8199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_NEW_ARRAY */ 8202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolve class. (This is an uncommon case.) 8206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 holds array length 8208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r2 holds class ref CCCC 8209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_ARRAY_resolve: 8211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 8212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r1 @ r9<- length (save) 8213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r2 @ r1<- CCCC 8214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ r2<- false 8215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 8216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- call(clazz, ref) 8217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 8218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r9 @ r1<- length (restore) 8219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 8220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ fall through to OP_NEW_ARRAY_finish 8221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Finish allocation. 8224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds class 8226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 holds array length 8227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_ARRAY_finish: 8229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #ALLOC_DONT_TRACK @ don't track in local refs table 8230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmAllocArrayByClass @ r0<- call(clazz, length, flags) 8231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 8232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle the exception 8234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ vA<- r0 8238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY */ 8242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds array class 8246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 holds AA or BA 8247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_continue: 8249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offClassObject_descriptor] @ r3<- arrayClass->descriptor 8250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #ALLOC_DONT_TRACK @ r2<- alloc flags 8251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r3, [r3, #1] @ r3<- descriptor[1] 8252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- AA (length) 8254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10, lsr #4 @ r1<- B (length) 8256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #'I' @ array of ints? 8258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpne r3, #'L' @ array of objects? 8259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpne r3, #'[' @ array of arrays? 8260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r1 @ save length in r9 8261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_FILLED_NEW_ARRAY_notimpl @ no, not handled yet 8262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmAllocArrayByClass @ r0<- call(arClass, length, flags) 8263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null return? 8264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ alloc failed, handle exception 8265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- FEDC or CCCC 8267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [rGLUE, #offGlue_retval] @ retval.l <- new array 8268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, #offArrayObject_contents @ r0<- newArray->contents 8269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r9, r9, #1 @ length--, check for neg 8270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance to next instr, load rINST 8271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi 2f @ was zero, bail 8272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ copy values from registers into the array 8274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ r0=array, r1=CCCC/FEDC, r9=length (from AA or B), r10=AA/BA 8275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r1, lsl #2 @ r2<- &fp[CCCC] 8277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: ldr r3, [r2], #4 @ r3<- *r2++ 8278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r9, r9, #1 @ count-- 8279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r0], #4 @ *contents++ = vX 8280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bpl 1b 8281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ continue at 2 8282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #4 @ length was initially 5? 8284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r10, #15 @ r2<- A 8285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f @ <= 4 args, branch 8286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- vA 8287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r9, r9, #1 @ count-- 8288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r0, #16] @ contents[4] = vA 8289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: and r2, r1, #15 @ r2<- F/E/D/C 8290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- vF/vE/vD/vC 8291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, lsr #4 @ r1<- next reg in low 4 8292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r9, r9, #1 @ count-- 8293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r0], #4 @ *contents++ = vX 8294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bpl 1b 8295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ continue at 2 8296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 8299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 8300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute it 8301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception indicating that we have not implemented this 8304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mode of filled-new-array. 8305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_notimpl: 8307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, .L_strInternalError 8308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, .L_strFilledNewArrayNotImpl 8309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 8310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 8311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) @ define in one or the other, not both 8313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_strFilledNewArrayNotImpl: 8314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrFilledNewArrayNotImpl 8315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_strInternalError: 8316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrInternalError 8317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY_RANGE */ 8321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds array class 8325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 holds AA or BA 8326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_continue: 8328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offClassObject_descriptor] @ r3<- arrayClass->descriptor 8329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #ALLOC_DONT_TRACK @ r2<- alloc flags 8330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r3, [r3, #1] @ r3<- descriptor[1] 8331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- AA (length) 8333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10, lsr #4 @ r1<- B (length) 8335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #'I' @ array of ints? 8337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpne r3, #'L' @ array of objects? 8338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpne r3, #'[' @ array of arrays? 8339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r1 @ save length in r9 8340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_FILLED_NEW_ARRAY_RANGE_notimpl @ no, not handled yet 8341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmAllocArrayByClass @ r0<- call(arClass, length, flags) 8342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null return? 8343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ alloc failed, handle exception 8344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- FEDC or CCCC 8346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [rGLUE, #offGlue_retval] @ retval.l <- new array 8347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, #offArrayObject_contents @ r0<- newArray->contents 8348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r9, r9, #1 @ length--, check for neg 8349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance to next instr, load rINST 8350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi 2f @ was zero, bail 8351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ copy values from registers into the array 8353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ r0=array, r1=CCCC/FEDC, r9=length (from AA or B), r10=AA/BA 8354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r1, lsl #2 @ r2<- &fp[CCCC] 8356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: ldr r3, [r2], #4 @ r3<- *r2++ 8357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r9, r9, #1 @ count-- 8358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r0], #4 @ *contents++ = vX 8359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bpl 1b 8360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ continue at 2 8361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #4 @ length was initially 5? 8363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r10, #15 @ r2<- A 8364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f @ <= 4 args, branch 8365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- vA 8366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r9, r9, #1 @ count-- 8367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r0, #16] @ contents[4] = vA 8368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: and r2, r1, #15 @ r2<- F/E/D/C 8369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- vF/vE/vD/vC 8370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, lsr #4 @ r1<- next reg in low 4 8371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r9, r9, #1 @ count-- 8372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r0], #4 @ *contents++ = vX 8373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bpl 1b 8374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ continue at 2 8375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 8378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 8379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute it 8380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception indicating that we have not implemented this 8383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mode of filled-new-array. 8384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_notimpl: 8386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, .L_strInternalError 8387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, .L_strFilledNewArrayNotImpl 8388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 8389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 8390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) @ define in one or the other, not both 8392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_strFilledNewArrayNotImpl: 8393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrFilledNewArrayNotImpl 8394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_strInternalError: 8395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrInternalError 8396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPL_FLOAT */ 8400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Test for NaN with a second comparison. EABI forbids testing bit 8402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ patterns, and we can't represent 0x7fc00000 in immediate form, so 8403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ make the library call. 8404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_gt_or_nan: 8405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r9 @ reverse order 8406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r10 8407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cfcmple @ r0<- Z set if eq, C clear if < 8408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bleq common_abort 8409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movcc r1, #1 @ (greater than) r1<- 1 8410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_CMPL_FLOAT_finish 8411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r1, #0 @ r1<- 1 or -1 for NaN 8412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_CMPL_FLOAT_finish 8413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if 0 /* "clasic" form */ 8416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 8417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 8418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 8419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r2) @ r9<- vBB 8420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r10, r3) @ r10<- vCC 8421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- vBB 8422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- vCC 8423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpeq @ r0<- (vBB == vCC) 8424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ equal? 8425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r1, #0 @ yes, result is 0 8426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne OP_CMPL_FLOAT_finish 8427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- vBB 8428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- vCC 8429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmplt @ r0<- (vBB < vCC) 8430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ less than? 8431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b OP_CMPL_FLOAT_continue 8432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@%break 8433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_CMPL_FLOAT_continue: 8435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r1, #0 @ yes, result is -1 8436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne OP_CMPL_FLOAT_finish 8437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- vBB 8438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- vCC 8439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpgt @ r0<- (vBB > vCC) 8440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ greater than? 8441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq OP_CMPL_FLOAT_nan @ no, must be NaN 8442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ yes, result is 1 8443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ fall through to _finish 8444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_CMPL_FLOAT_finish: 8446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 8447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r3) @ vAA<- r1 8449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is expected to be uncommon, so we double-branch (once to here, 8454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * again back to _finish). 8455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_CMPL_FLOAT_nan: 8457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r1, #0 @ r1<- 1 or -1 for NaN 8458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b OP_CMPL_FLOAT_finish 8459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 8461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPG_FLOAT */ 8464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Test for NaN with a second comparison. EABI forbids testing bit 8466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ patterns, and we can't represent 0x7fc00000 in immediate form, so 8467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ make the library call. 8468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_gt_or_nan: 8469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r9 @ reverse order 8470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r10 8471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cfcmple @ r0<- Z set if eq, C clear if < 8472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bleq common_abort 8473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movcc r1, #1 @ (greater than) r1<- 1 8474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_CMPG_FLOAT_finish 8475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ r1<- 1 or -1 for NaN 8476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_CMPG_FLOAT_finish 8477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if 0 /* "clasic" form */ 8480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 8481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 8482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 8483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r2) @ r9<- vBB 8484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r10, r3) @ r10<- vCC 8485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- vBB 8486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- vCC 8487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpeq @ r0<- (vBB == vCC) 8488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ equal? 8489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r1, #0 @ yes, result is 0 8490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne OP_CMPG_FLOAT_finish 8491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- vBB 8492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- vCC 8493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmplt @ r0<- (vBB < vCC) 8494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ less than? 8495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b OP_CMPG_FLOAT_continue 8496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@%break 8497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_CMPG_FLOAT_continue: 8499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r1, #0 @ yes, result is -1 8500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne OP_CMPG_FLOAT_finish 8501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- vBB 8502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- vCC 8503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpgt @ r0<- (vBB > vCC) 8504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ greater than? 8505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq OP_CMPG_FLOAT_nan @ no, must be NaN 8506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ yes, result is 1 8507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ fall through to _finish 8508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_CMPG_FLOAT_finish: 8510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 8511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r3) @ vAA<- r1 8513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is expected to be uncommon, so we double-branch (once to here, 8518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * again back to _finish). 8519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_CMPG_FLOAT_nan: 8521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ r1<- 1 or -1 for NaN 8522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b OP_CMPG_FLOAT_finish 8523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 8525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPL_DOUBLE */ 8528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Test for NaN with a second comparison. EABI forbids testing bit 8530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ patterns, and we can't represent 0x7fc00000 in immediate form, so 8531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ make the library call. 8532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_gt_or_nan: 8533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r10, {r0-r1} @ reverse order 8534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r2-r3} 8535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cdcmple @ r0<- Z set if eq, C clear if < 8536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bleq common_abort 8537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movcc r1, #1 @ (greater than) r1<- 1 8538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_CMPL_DOUBLE_finish 8539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r1, #0 @ r1<- 1 or -1 for NaN 8540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_CMPL_DOUBLE_finish 8541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPG_DOUBLE */ 8544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Test for NaN with a second comparison. EABI forbids testing bit 8546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ patterns, and we can't represent 0x7fc00000 in immediate form, so 8547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ make the library call. 8548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_gt_or_nan: 8549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r10, {r0-r1} @ reverse order 8550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r2-r3} 8551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cdcmple @ r0<- Z set if eq, C clear if < 8552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bleq common_abort 8553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movcc r1, #1 @ (greater than) r1<- 1 8554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_CMPG_DOUBLE_finish 8555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ r1<- 1 or -1 for NaN 8556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_CMPG_DOUBLE_finish 8557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMP_LONG */ 8560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_less: 8562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r1, #0 @ r1<- -1 8563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Want to cond code the next mov so we can avoid branch, but don't see it; 8564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ instead, we just replicate the tail end. 8565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r9) @ vAA<- r1 8567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_greater: 8571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ r1<- 1 8572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ fall through to _finish 8573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_finish: 8575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r9) @ vAA<- r1 8577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_AGET_WIDE */ 8582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_AGET_WIDE_finish: 8584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrd r2, [r0, #offArrayObject_contents] @ r2/r3<- vBB[vCC] 8586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 8587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r2-r3} @ vAA/vAA+1<- r2/r3 8589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_APUT_WIDE */ 8593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_WIDE_finish: 8595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r2-r3} @ r2/r3<- vAA/vAA+1 8597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project strd r2, [r0, #offArrayObject_contents] @ r2/r3<- vBB[vCC] 8599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_APUT_OBJECT */ 8603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 = vBB (arrayObj) 8606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 = vAA (obj) 8607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 = offset into array (vBB + vCC * width) 8608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_OBJECT_finish: 8610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ storing null reference? 8611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_APUT_OBJECT_skip_check @ yes, skip type checks 8612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, #offObject_clazz] @ r0<- obj->clazz 8613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r1, #offObject_clazz] @ r1<- arrayObj->clazz 8614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmCanPutArrayElement @ test object type vs. array type 8615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ okay? 8616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errArrayStore @ no 8617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_OBJECT_skip_check: 8618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r9, [r10, #offArrayObject_contents] @ vBB[vCC]<- vAA 8621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET */ 8625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_finish: 8632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak0 8633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits) 8637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 8642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_WIDE */ 8646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_WIDE_finish: 8653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrd r0, [r9, r3] @ r0/r1<- obj.field (64-bit align ok) 8658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r2, lsl #2 @ r3<- &fp[A] 8661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r3, {r0-r1} @ fp[A]<- r0/r1 8663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_OBJECT */ 8667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_OBJECT_finish: 8674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak0 8675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits) 8679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 8684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_BOOLEAN */ 8688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BOOLEAN_finish: 8695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak1 8696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits) 8700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 8705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_BYTE */ 8709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BYTE_finish: 8716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak2 8717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits) 8721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 8726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_CHAR */ 8730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_CHAR_finish: 8737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak3 8738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits) 8742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 8747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_SHORT */ 8751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_SHORT_finish: 8758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak4 8759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits) 8763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 8768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT */ 8772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_finish: 8779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak0 8780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- A+ 8781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #15 @ r1<- A 8783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- fp[A] 8785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0 8789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_WIDE */ 8793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_WIDE_finish: 8800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r3<- &fp[A] 8805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- fp[A] 8808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project strd r0, [r9, r3] @ obj.field (64 bits, aligned)<- r0 8810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_OBJECT */ 8814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_OBJECT_finish: 8821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak0 8822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- A+ 8823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #15 @ r1<- A 8825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- fp[A] 8827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0 8831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_BOOLEAN */ 8835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BOOLEAN_finish: 8842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak1 8843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- A+ 8844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #15 @ r1<- A 8846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- fp[A] 8848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0 8852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_BYTE */ 8856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BYTE_finish: 8863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak2 8864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- A+ 8865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #15 @ r1<- A 8867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- fp[A] 8869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0 8873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_CHAR */ 8877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_CHAR_finish: 8884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak3 8885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- A+ 8886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #15 @ r1<- A 8888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- fp[A] 8890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0 8894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_SHORT */ 8898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_SHORT_finish: 8905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak4 8906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- A+ 8907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #15 @ r1<- A 8909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- fp[A] 8911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0 8915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET */ 8919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_resolve: 8925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_finish @ yes, finish 8931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_WIDE */ 8935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_resolve: 8941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_WIDE_finish @ yes, finish 8947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_OBJECT */ 8951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_resolve: 8957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_OBJECT_finish @ yes, finish 8963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_BOOLEAN */ 8967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_resolve: 8973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_BOOLEAN_finish @ yes, finish 8979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_BYTE */ 8983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_resolve: 8989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_BYTE_finish @ yes, finish 8995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_CHAR */ 8999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 9002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 9003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_resolve: 9005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 9006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 9007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 9008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 9009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 9010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_CHAR_finish @ yes, finish 9011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 9012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_SHORT */ 9015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 9018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 9019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_resolve: 9021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 9022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 9023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 9024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 9025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 9026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_SHORT_finish @ yes, finish 9027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 9028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT */ 9031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 9034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 9035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_resolve: 9037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 9038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 9039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 9040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 9041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 9042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_finish @ yes, finish 9043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 9044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_WIDE */ 9047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 9050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 9051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9: &fp[AA] 9052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_WIDE_resolve: 9054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 9055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 9056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 9057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 9058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 9059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_WIDE_finish @ yes, finish 9060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 9061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_OBJECT */ 9064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 9067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 9068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_OBJECT_resolve: 9070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 9071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 9072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 9073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 9074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 9075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_OBJECT_finish @ yes, finish 9076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 9077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_BOOLEAN */ 9080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 9083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 9084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_resolve: 9086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 9087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 9088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 9089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 9090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 9091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_BOOLEAN_finish @ yes, finish 9092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 9093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_BYTE */ 9096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 9099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 9100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_resolve: 9102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 9103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 9104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 9105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 9106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 9107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_BYTE_finish @ yes, finish 9108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 9109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_CHAR */ 9112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 9115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 9116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_resolve: 9118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 9119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 9120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 9121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 9122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 9123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_CHAR_finish @ yes, finish 9124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 9125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_SHORT */ 9128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 9131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 9132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_resolve: 9134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 9135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 9136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 9137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 9138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 9139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_SHORT_finish @ yes, finish 9140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 9141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL */ 9144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 9147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = resolved base method 9148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 = C or CCCC (index of first arg, which is the "this" ptr) 9149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_continue: 9151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r10) @ r1<- "this" ptr 9152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrh r2, [r0, #offMethod_methodIndex] @ r2<- baseMethod->methodIndex 9153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is "this" null? 9154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null "this", throw exception 9155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r1, #offObject_clazz] @ r1<- thisPtr->clazz 9156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offClassObject_vtable] @ r3<- thisPtr->clazz->vtable 9157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r2, lsl #2] @ r3<- vtable[methodIndex] 9158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodNoRange @ continue on 9159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_SUPER */ 9162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 9165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = resolved base method 9166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 = method->clazz 9167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_continue: 9169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r9, #offClassObject_super] @ r1<- method->clazz->super 9170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrh r2, [r0, #offMethod_methodIndex] @ r2<- baseMethod->methodIndex 9171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r1, #offClassObject_vtableCount] @ r3<- super->vtableCount 9172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 9173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (methodIndex, vtableCount) 9174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs .LOP_INVOKE_SUPER_nsm @ method not present in superclass 9175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r1, #offClassObject_vtable] @ r1<- ...clazz->super->vtable 9176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r1, r2, lsl #2] @ r3<- vtable[methodIndex] 9177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodNoRange @ continue on 9178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_resolve: 9180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- method->clazz 9181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_VIRTUAL @ resolver method type 9182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 9183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 9184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_SUPER_continue @ no, continue 9185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 9186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 9189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = resolved base method 9190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_nsm: 9192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offMethod_name] @ r1<- method name 9193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errNoSuchMethod 9194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_DIRECT */ 9197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 = reference (BBBB or CCCC) 9201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 = "this" register 9202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_resolve: 9204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 9205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 9206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_DIRECT @ resolver method type 9207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 9208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 9209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r10) @ r2<- "this" ptr (reload) 9210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_DIRECT_finish @ no, continue 9211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 9212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL_RANGE */ 9215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 9218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = resolved base method 9219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 = C or CCCC (index of first arg, which is the "this" ptr) 9220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_RANGE_continue: 9222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r10) @ r1<- "this" ptr 9223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrh r2, [r0, #offMethod_methodIndex] @ r2<- baseMethod->methodIndex 9224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is "this" null? 9225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null "this", throw exception 9226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r1, #offObject_clazz] @ r1<- thisPtr->clazz 9227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offClassObject_vtable] @ r3<- thisPtr->clazz->vtable 9228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r2, lsl #2] @ r3<- vtable[methodIndex] 9229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodRange @ continue on 9230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_SUPER_RANGE */ 9233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 9236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = resolved base method 9237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 = method->clazz 9238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_continue: 9240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r9, #offClassObject_super] @ r1<- method->clazz->super 9241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrh r2, [r0, #offMethod_methodIndex] @ r2<- baseMethod->methodIndex 9242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r1, #offClassObject_vtableCount] @ r3<- super->vtableCount 9243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 9244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (methodIndex, vtableCount) 9245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs .LOP_INVOKE_SUPER_RANGE_nsm @ method not present in superclass 9246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r1, #offClassObject_vtable] @ r1<- ...clazz->super->vtable 9247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r1, r2, lsl #2] @ r3<- vtable[methodIndex] 9248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodRange @ continue on 9249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_resolve: 9251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- method->clazz 9252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_VIRTUAL @ resolver method type 9253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 9254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 9255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_SUPER_RANGE_continue @ no, continue 9256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 9257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 9260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = resolved base method 9261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_nsm: 9263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offMethod_name] @ r1<- method name 9264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errNoSuchMethod 9265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_DIRECT_RANGE */ 9268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 = reference (BBBB or CCCC) 9272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 = "this" register 9273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_resolve: 9275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 9276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 9277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_DIRECT @ resolver method type 9278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 9279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 9280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r10) @ r2<- "this" ptr (reload) 9281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_DIRECT_RANGE_finish @ no, continue 9282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 9283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FLOAT_TO_LONG */ 9286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert the float in r0 to a long in r0/r1. 9288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We have to clip values to long min/max per the specification. The 9290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected common case is a "reasonable" value that converts directly 9291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to modest integer. The EABI convert function isn't doing this for us. 9292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectf2l_doconv: 9294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r4, lr} 9295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0x5f000000 @ (float)maxlong 9296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r4, r0 9297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpge @ is arg >= maxlong? 9298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 9299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r0, #0 @ return maxlong (7fffffff) 9300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r1, #0x80000000 9301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmnefd sp!, {r4, pc} 9302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 9304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0xdf000000 @ (float)minlong 9305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmple @ is arg <= minlong? 9306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 9307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r0, #0 @ return minlong (80000000) 9308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r1, #0x80000000 9309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmnefd sp!, {r4, pc} 9310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 9312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r4 9313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpeq @ is arg == self? 9314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ zero == no 9315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project moveq r1, #0 @ return zero for NaN 9316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmeqfd sp!, {r4, pc} 9317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 9319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_f2lz @ convert float to long 9320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r4, pc} 9321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DOUBLE_TO_LONG */ 9324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert the double in r0/r1 to a long in r0/r1. 9326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We have to clip values to long min/max per the specification. The 9328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected common case is a "reasonable" value that converts directly 9329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to modest integer. The EABI convert function isn't doing this for us. 9330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectd2l_doconv: 9332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r4, r5, lr} @ save regs 9333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, .LOP_DOUBLE_TO_LONG_max @ (double)maxlong, hi 9334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub sp, sp, #4 @ align for EABI 9335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ (double)maxlong, lo 9336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r4, r0 @ save r0 9337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r5, r1 @ and r1 9338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dcmpge @ is arg >= maxlong? 9339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 9340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r0, #0 @ return maxlong (7fffffffffffffff) 9341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r1, #0x80000000 9342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f 9343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 9345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r5 9346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, .LOP_DOUBLE_TO_LONG_min @ (double)minlong, hi 9347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ (double)minlong, lo 9348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dcmple @ is arg <= minlong? 9349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 9350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r0, #0 @ return minlong (8000000000000000) 9351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r1, #0x80000000 9352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f 9353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 9355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r5 9356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, r4 @ compare against self 9357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r5 9358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dcmpeq @ is arg == self? 9359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ zero == no 9360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project moveq r1, #0 @ return zero for NaN 9361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq 1f 9362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 9364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r5 9365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_d2lz @ convert double to long 9366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 9368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add sp, sp, #4 9369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r4, r5, pc} 9370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_max: 9372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word 0x43e00000 @ maxlong, as a double (high word) 9373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_min: 9374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word 0xc3e00000 @ minlong, as a double (high word) 9375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MUL_LONG */ 9378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MUL_LONG_finish: 9380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r0, {r9-r10} @ vAA/vAA+1<- r9/r10 9382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHL_LONG */ 9386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHL_LONG_finish: 9388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl r2 @ r0<- r0 << r2 9389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 9391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHR_LONG */ 9395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHR_LONG_finish: 9397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, asr r2 @ r1<- r1 >> r2 9398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 9400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_USHR_LONG */ 9404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_USHR_LONG_finish: 9406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, lsr r2 @ r1<- r1 >>> r2 9407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 9409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHL_LONG_2ADDR */ 9413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHL_LONG_2ADDR_finish: 9415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 9417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHR_LONG_2ADDR */ 9421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHR_LONG_2ADDR_finish: 9423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 9425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_USHR_LONG_2ADDR */ 9429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_USHR_LONG_2ADDR_finish: 9431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 9433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_EXECUTE_INLINE */ 9437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Extract args, call function. 9440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = #of args (0-4) 9441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 = call index 9442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * lr = return addr, above [DO NOT bl out of here w/o preserving LR] 9443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Other ideas: 9445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * - Use a jump table from the main piece to jump directly into the 9446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * AND/LDR pairs. Costs a data load, saves a branch. 9447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * - Have five separate pieces that do the loading, so we can work the 9448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * interleave a little better. Increases code size. 9449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_EXECUTE_INLINE_continue: 9451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r0, r0, #4 @ r0<- 4-r0 9452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r9, 2) @ r9<- FEDC 9453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add pc, pc, r0, lsl #3 @ computed goto, 2 instrs each 9454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort @ (skipped due to ARM prefetch) 9455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project4: and ip, r9, #0xf000 @ isolate F 9456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rFP, ip, lsr #10] @ r3<- vF (shift right 12, left 2) 9457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: and ip, r9, #0x0f00 @ isolate E 9458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rFP, ip, lsr #6] @ r2<- vE 9459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: and ip, r9, #0x00f0 @ isolate D 9460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [rFP, ip, lsr #2] @ r1<- vD 9461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: and ip, r9, #0x000f @ isolate C 9462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rFP, ip, lsl #2] @ r0<- vC 9463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project0: 9464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, .LOP_EXECUTE_INLINE_table @ table of InlineOperation 9465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LDR_PC "[r9, r10, lsl #4]" @ sizeof=16, "func" is first entry 9466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ (not reached) 9467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_EXECUTE_INLINE_table: 9469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word gDvmInlineOpsTable 9470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size dvmAsmSisterStart, .-dvmAsmSisterStart 9473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmSisterEnd 9474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterEnd: 9475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/footer.S */ 9477ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 9480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common subroutines and data 9481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 9482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9484ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9485ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 9487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .align 2 9488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9489ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 9490ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/* 9491ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Return from the translation cache to the interpreter when the compiler is 9492ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * having issues translating/executing a Dalvik instruction. We have to skip 9493ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * the code cache lookup otherwise it is possible to indefinitely bouce 9494ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * between the interpreter and the code cache if the instruction that fails 9495ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * to be compiled happens to be at a trace start. 9496ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */ 9497ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .global dvmJitToInterpPunt 9498ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben ChengdvmJitToInterpPunt: 9499ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov rPC, r0 9500ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#ifdef EXIT_STATS 9501ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r0,lr 9502ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bl dvmBumpPunt; 9503ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 9504ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng EXPORT_PC() 9505ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng adrl rIBASE, dvmAsmInstructionStart 9506ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_INST() 9507ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) 9508ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) 9509ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9510ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/* 9511ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Return to the interpreter to handle a single instruction. 9512ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * On entry: 9513ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * r0 <= PC 9514ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * r1 <= PC of resume instruction 9515ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * lr <= resume point in translation 9516ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */ 9517ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .global dvmJitToInterpSingleStep 9518ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben ChengdvmJitToInterpSingleStep: 9519ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng str lr,[rGLUE,#offGlue_jitResume] 9520ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng str r1,[rGLUE,#offGlue_jitResumePC] 9521ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r1,#kInterpEntryInstr 9522ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng @ enum is 4 byte in aapcs-EABI 9523ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng str r1, [rGLUE, #offGlue_entryPoint] 9524ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov rPC,r0 9525ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng EXPORT_PC() 9526ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng adrl rIBASE, dvmAsmInstructionStart 9527ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r2,#kJitSingleStep @ Ask for single step and then revert 9528ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng str r2,[rGLUE,#offGlue_jitState] 9529ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r1,#1 @ set changeInterp to bail to debug interp 9530ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng b common_gotoBail 9531ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9532ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9533ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/* 9534ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Return from the translation cache and immediately request 9535ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * a translation for the exit target. Commonly used following 9536ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * invokes. 9537ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */ 9538ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .global dvmJitToTraceSelect 9539ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben ChengdvmJitToTraceSelect: 9540ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldr rPC,[r14, #-1] @ get our target PC 9541ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng add rINST,r14,#-5 @ save start of chain branch 9542ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r0,rPC 9543ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bl dvmJitGetCodeAddr @ Is there a translation? 9544ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 9545ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng beq 2f 9546ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r1,rINST 9547ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bl dvmJitChain @ r0<- dvmJitChain(codeAddr,chainAddr) 9548ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldr rINST, .LdvmCompilerTemplateStart @ rINST is rCBASE in compiled code 954946cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee cmp r0,#0 @ successful chain? 955046cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee bxne r0 @ continue native execution 955146cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee b toInterpreter @ didn't chain - resume with interpreter 9552ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9553ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/* No translation, so request one if profiling isn't disabled*/ 9554ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng2: 95551da12167d913efde56ec3b40491524b051679f2cAndy McFadden adrl rIBASE, dvmAsmInstructionStart 9556ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 9557ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_INST() 9558ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0, #0 9559ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_selectTrace 9560ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) 9561ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) 9562ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9563ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/* 9564ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Return from the translation cache to the interpreter. 9565ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * The return was done with a BLX from thumb mode, and 9566ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * the following 32-bit word contains the target rPC value. 9567ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Note that lr (r14) will have its low-order bit set to denote 9568ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * its thumb-mode origin. 9569ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * 9570ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * We'll need to stash our lr origin away, recover the new 9571ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * target and then check to see if there is a translation available 9572ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * for our new target. If so, we do a translation chain and 9573ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * go back to native execution. Otherwise, it's back to the 9574ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * interpreter (after treating this entry as a potential 9575ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * trace start). 9576ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */ 9577ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .global dvmJitToInterpNormal 9578ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben ChengdvmJitToInterpNormal: 9579ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldr rPC,[r14, #-1] @ get our target PC 9580ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng add rINST,r14,#-5 @ save start of chain branch 9581ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#ifdef EXIT_STATS 9582ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bl dvmBumpNormal 9583ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 9584ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r0,rPC 9585ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bl dvmJitGetCodeAddr @ Is there a translation? 9586ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 958746cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee beq toInterpreter @ go if not, otherwise do chain 9588ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r1,rINST 9589ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bl dvmJitChain @ r0<- dvmJitChain(codeAddr,chainAddr) 9590ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldr rINST, .LdvmCompilerTemplateStart @ rINST is rCBASE in compiled code 959146cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee cmp r0,#0 @ successful chain? 959246cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee bxne r0 @ continue native execution 959346cd5b63c29d3284a9ff3e0d0711fb136f409313Bill Buzbee b toInterpreter @ didn't chain - resume with interpreter 9594ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9595ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/* 9596ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Return from the translation cache to the interpreter to do method invocation. 9597ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Check if translation exists for the callee, but don't chain to it. 9598ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */ 9599ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .global dvmJitToInterpNoChain 9600ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben ChengdvmJitToInterpNoChain: 9601ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#ifdef EXIT_STATS 9602ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bl dvmBumpNoChain 9603ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 9604ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r0,rPC 9605ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bl dvmJitGetCodeAddr @ Is there a translation? 9606ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 9607ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bxne r0 @ continue native execution if so 9608ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9609ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/* 9610ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * No translation, restore interpreter regs and start interpreting. 9611ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * rGLUE & rFP were preserved in the translated code, and rPC has 9612ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * already been restored by the time we get here. We'll need to set 9613ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * up rIBASE & rINST, and load the address of the JitTable into r0. 9614ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */ 961546cd5b63c29d3284a9ff3e0d0711fb136f409313Bill BuzbeetoInterpreter: 9616ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng EXPORT_PC() 9617ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng adrl rIBASE, dvmAsmInstructionStart 9618ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_INST() 9619ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 9620ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng @ NOTE: intended fallthrough 9621ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/* 9622ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Common code to update potential trace start counter, and initiate 9623ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * a trace-build if appropriate. On entry, rPC should point to the 9624ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * next instruction to execute, and rINST should be already loaded with 9625ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * the next opcode word, and r0 holds a pointer to the jit profile 9626ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * table (pJitProfTable). 9627ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */ 9628ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Chengcommon_testUpdateProfile: 9629ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 9630ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) 9631ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE_IFEQ(ip) @ if not profiling, fallthrough otherwise */ 9632ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9633ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Chengcommon_updateProfile: 9634ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng eor r3,rPC,rPC,lsr #12 @ cheap, but fast hash function 9635ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng lsl r3,r3,#23 @ shift out excess 511 9636ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldrb r1,[r0,r3,lsr #23] @ get counter 9637ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) 9638ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng subs r1,r1,#1 @ decrement counter 9639ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng strb r1,[r0,r3,lsr #23] @ and store it 9640ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE_IFNE(ip) @ if not threshold, fallthrough otherwise */ 9641ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9642ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng/* 9643ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * Here, we switch to the debug interpreter to request 9644ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * trace selection. First, though, check to see if there 9645ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * is already a native translation in place (and, if so, 9646ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng * jump to it now). 9647ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng */ 9648ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r1,#255 9649ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng strb r1,[r0,r3,lsr #23] @ reset counter 9650ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng EXPORT_PC() 9651ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r0,rPC 9652ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bl dvmJitGetCodeAddr @ r0<- dvmJitGetCodeAddr(rPC) 9653ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 9654ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldrne rINST, .LdvmCompilerTemplateStart @ rINST is rCBASE in compiled code 9655ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng beq common_selectTrace 9656ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bxne r0 @ jump to the translation 9657ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Chengcommon_selectTrace: 9658ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r2,#kJitTSelectRequest @ ask for trace selection 9659ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng str r2,[rGLUE,#offGlue_jitState] 9660ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r1,#1 @ set changeInterp 9661ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng b common_gotoBail 9662ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9663ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng.LdvmCompilerTemplateStart: 9664ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .word dvmCompilerTemplateStart 9665ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9666ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 9667ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 9668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code when a backward branch is taken. 9670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 is PC adjustment *in bytes* 9673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_backwardBranch: 9675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, #kInterpEntryInstr 9676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_periodicChecks 9677ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 9678ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 9679ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 9680ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 9681ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 9682ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) 9683ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) 9684ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 9685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 9686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9688ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 9689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Need to see if the thread needs to be suspended or debugger/profiler 9693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * activity has begun. 9694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: if JDWP isn't running, zero out pDebuggerActive pointer so we don't 9696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * have to do the second ldr. 9697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: reduce this so we're just checking a single location. 9699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 is reentry type, e.g. kInterpEntryInstr 9702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 is trampoline PC adjustment *in bytes* 9703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_periodicChecks: 9705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_pSelfSuspendCount] @ r3<- &suspendCount 9706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) 9708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [rGLUE, #offGlue_pDebuggerActive] @ r1<- &debuggerActive 9709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_PROFILER) 9711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_pActiveProfilers] @ r2<- &activeProfilers 9712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3] @ r3<- suspendCount (int) 9715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) 9717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r1, [r1] @ r1<- debuggerActive (boolean) 9718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined (WITH_PROFILER) 9720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2] @ r2<- activeProfilers (int) 9721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ suspend pending? 972499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project bne 2f @ yes, do full suspension check 9725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) || defined(WITH_PROFILER) 9727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# if defined(WITH_DEBUGGER) && defined(WITH_PROFILER) 9728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs r1, r1, r2 @ r1<- r1 | r2 9729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ debugger attached or profiler started? 9730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# elif defined(WITH_DEBUGGER) 9731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ debugger attached? 9732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# elif defined(WITH_PROFILER) 9733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ profiler started? 9734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# endif 9735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 3f @ debugger/profiler, switch interp 9736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr @ nothing to do, return 9739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: @ check suspend 9741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 974299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project EXPORT_PC() @ need for precise GC 9743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b dvmCheckSuspendPending @ suspend if necessary, then return 9744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: @ debugger/profiler enabled, bail out 9746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add rPC, rPC, r9 @ update rPC 9747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [rGLUE, #offGlue_entryPoint] 9748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ "want switch" = true 9749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_gotoBail 9750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The equivalent of "goto bail", this calls through the "bail handler". 9754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * State registers will be saved to the "glue" area before bailing. 9756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 is "bool changeInterp", indicating if we want to switch to the 9759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * other interpreter or just bail all the way out 9760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_gotoBail: 9762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_FP_TO_GLUE() @ export state to "glue" 9763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rGLUE @ r0<- glue ptr 9764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b dvmMterpStdBail @ call(glue, changeInterp) 9765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @add r1, r1, #1 @ using (boolean+1) 9767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @add r0, rGLUE, #offGlue_jmpBuf @ r0<- &glue->jmpBuf 9768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl _longjmp @ does not return 9769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_abort 9770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for method invocation with range. 9774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 is "Method* methodToCall", the method we're trying to call 9777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_invokeMethodRange: 9779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeNewRange: 9780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ prepare to copy args to "outs" area of current frame 9781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r2, rINST, lsr #8 @ r2<- AA (arg count) -- test for zero 9782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(r10, rFP) @ r10<- stack save area 9783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LinvokeArgsDone @ if no args, skip the rest 9784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- CCCC 9785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ r0=methodToCall, r1=CCCC, r2=count, r10=outs 9787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ (very few methods have > 10 args; could unroll for common cases) 9788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r1, lsl #2 @ r3<- &fp[CCCC] 9789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r10, r10, r2, lsl #2 @ r10<- "outs" area, for call args 9790642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldrh r9, [r0, #offMethod_registersSize] @ r9<- methodToCall->regsSize 9791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: ldr r1, [r3], #4 @ val = *fp++ 9792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r2, r2, #1 @ count-- 9793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r10], #4 @ *outs++ = val 9794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1b @ ...while count != 0 9795642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldrh r3, [r0, #offMethod_outsSize] @ r3<- methodToCall->outsSize 9796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LinvokeArgsDone 9797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for method invocation without range. 9800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 is "Method* methodToCall", the method we're trying to call 9803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_invokeMethodNoRange: 9805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeNewNoRange: 9806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ prepare to copy args to "outs" area of current frame 9807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r2, rINST, lsr #12 @ r2<- B (arg count) -- test for zero 9808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(r10, rFP) @ r10<- stack save area 9809642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng FETCH(r1, 2) @ r1<- GFED (load here to hide latency) 9810642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldrh r9, [r0, #offMethod_registersSize] @ r9<- methodToCall->regsSize 9811642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldrh r3, [r0, #offMethod_outsSize] @ r3<- methodToCall->outsSize 9812642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng beq .LinvokeArgsDone 9813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9814642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng @ r0=methodToCall, r1=GFED, r3=outSize, r2=count, r9=regSize, r10=outs 9815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeNonRange: 9816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r2, r2, #5 @ r2<- 5-r2 9817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add pc, pc, r2, lsl #4 @ computed goto, 4 instrs each 9818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort @ (skipped due to ARM prefetch) 9819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project5: and ip, rINST, #0x0f00 @ isolate A 9820642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldr r2, [rFP, ip, lsr #6] @ r2<- vA (shift right 8, left 2) 9821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0 @ nop 9822642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng str r2, [r10, #-4]! @ *--outs = vA 9823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project4: and ip, r1, #0xf000 @ isolate G 9824642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldr r2, [rFP, ip, lsr #10] @ r2<- vG (shift right 12, left 2) 9825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0 @ nop 9826642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng str r2, [r10, #-4]! @ *--outs = vG 9827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: and ip, r1, #0x0f00 @ isolate F 9828642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldr r2, [rFP, ip, lsr #6] @ r2<- vF 9829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0 @ nop 9830642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng str r2, [r10, #-4]! @ *--outs = vF 9831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: and ip, r1, #0x00f0 @ isolate E 9832642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldr r2, [rFP, ip, lsr #2] @ r2<- vE 9833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0 @ nop 9834642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng str r2, [r10, #-4]! @ *--outs = vE 9835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: and ip, r1, #0x000f @ isolate D 9836642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldr r2, [rFP, ip, lsl #2] @ r2<- vD 9837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0 @ nop 9838642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng str r2, [r10, #-4]! @ *--outs = vD 9839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project0: @ fall through to .LinvokeArgsDone 9840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9841642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng.LinvokeArgsDone: @ r0=methodToCall, r3=outSize, r9=regSize 9842642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldr r2, [r0, #offMethod_insns] @ r2<- method->insns 9843642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldr rINST, [r0, #offMethod_clazz] @ rINST<- method->clazz 9844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ find space for the new stack frame, check for overflow 9845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(r1, rFP) @ r1<- stack save area 9846642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng sub r1, r1, r9, lsl #2 @ r1<- newFp (old savearea - regsSize) 9847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(r10, r1) @ r10<- newSaveArea 9848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@ bl common_dumpRegs 9849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [rGLUE, #offGlue_interpStackEnd] @ r9<- interpStackEnd 9850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r3, r10, r3, lsl #2 @ r3<- bottom (newsave - outsSize) 9851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, r9 @ bottom < interpStackEnd? 9852642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldr r3, [r0, #offMethod_accessFlags] @ r3<- methodToCall->accessFlags 9853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blt .LstackOverflow @ yes, this frame will overflow stack 9854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ set up newSaveArea 9856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef EASY_GDB 9857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(ip, rFP) @ ip<- stack save area 9858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str ip, [r10, #offStackSaveArea_prevSave] 9859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str rFP, [r10, #offStackSaveArea_prevFrame] 9861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str rPC, [r10, #offStackSaveArea_savedPc] 9862ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 9863ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r9, #0 9864ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng str r9, [r10, #offStackSaveArea_returnAddr] 9865ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 9866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r10, #offStackSaveArea_method] 9867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project tst r3, #ACC_NATIVE 9868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LinvokeNative 9869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0-r3} 9872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_printNewline 9873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rFP 9874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 9875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmDumpFp 9876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0-r3} 9877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0-r3} 9878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r1 9879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 9880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmDumpFp 9881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_printNewline 9882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0-r3} 9883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9885642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldrh r9, [r2] @ r9 <- load INST from new PC 9886642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldr r3, [rINST, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex 9887642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng mov rPC, r2 @ publish new rPC 9888642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldr r2, [rGLUE, #offGlue_self] @ r2<- glue->self 9889642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng 9890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Update "glue" values for the new method 9891642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng @ r0=methodToCall, r1=newFp, r2=self, r3=newMethodClass, r9=newINST 9892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [rGLUE, #offGlue_method] @ glue->method = methodToCall 9893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ... 9894ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 9895ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 9896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov rFP, r1 @ fp = newFp 9897642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng GET_PREFETCHED_OPCODE(ip, r9) @ extract prefetched opcode from r9 9898642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng mov rINST, r9 @ publish new rINST 9899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r2, #offThread_curFrame] @ self->curFrame = newFp 9900ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 9901ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 9902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9903ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 9904ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov rFP, r1 @ fp = newFp 9905ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_PREFETCHED_OPCODE(ip, r9) @ extract prefetched opcode from r9 9906ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov rINST, r9 @ publish new rINST 9907ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng str r1, [r2, #offThread_curFrame] @ self->curFrame = newFp 9908ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) @ jump to next instruction 9909ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 9910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeNative: 9912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Prep for the native call 9913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ r0=methodToCall, r1=newFp, r10=newSaveArea 9914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_self] @ r3<- glue->self 9915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [r3, #offThread_jniLocal_nextEntry] @ r9<- thread->refNext 9916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r3, #offThread_curFrame] @ self->curFrame = newFp 9917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r9, [r10, #offStackSaveArea_localRefTop] @newFp->localRefTop=refNext 9918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r3 @ r9<- glue->self (preserve) 9919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, r0 @ r2<- methodToCall 9921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r1 @ r0<- newFp (points to args) 9922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rGLUE, #offGlue_retval @ r1<- &retval 9923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef ASSIST_DEBUGGER 9925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* insert fake function header to help gdb find the stack frame */ 9926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .Lskip 9927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dalvik_mterp, %function 9928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectdalvik_mterp: 9929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .fnstart 9930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MTERP_ENTRY1 9931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MTERP_ENTRY2 9932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lskip: 9933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @mov lr, pc @ set return addr 9936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ldr pc, [r2, #offMethod_nativeFunc] @ pc<- methodToCall->nativeFunc 9937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LDR_PC_LR "[r2, #offMethod_nativeFunc]" 9938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ native return; r9=self, r10=newSaveArea 9940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ equivalent to dvmPopJniLocals 9941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r10, #offStackSaveArea_localRefTop] @ r0<- newSave->localRefTop 9942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r9, #offThread_exception] @ check for exception 9943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str rFP, [r9, #offThread_curFrame] @ self->curFrame = fp 9944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ null? 9945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, #offThread_jniLocal_nextEntry] @ self->refNext<- r0 9946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_exceptionThrown @ no, handle exception 9947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 9949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstackOverflow: 9953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- self 9954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmHandleStackOverflow 9955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 9956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef ASSIST_DEBUGGER 9957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .fnend 9958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for method invocation, calling through "glue code". 9963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: now that we have range and non-range invoke handlers, this 9965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * needs to be split into two. Maybe just create entry points 9966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that set r9 and jump here? 9967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 is "Method* methodToCall", the method we're trying to call 9970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 is "bool methodCallRange", indicating if this is a /range variant 9971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 9973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeOld: 9974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub sp, sp, #8 @ space for args + pad 9975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(ip, 2) @ ip<- FEDC or CCCC 9976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, r0 @ A2<- methodToCall 9977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rGLUE @ A0<- glue 9978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_FP_TO_GLUE() @ export state to "glue" 9979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r9 @ A1<- methodCallRange 9980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ A3<- AA 9981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str ip, [sp, #0] @ A4<- ip 9982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmMterp_invokeMethod @ call the C invokeMethod 9983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add sp, sp, #8 @ remove arg area 9984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_resumeAfterGlueCall @ continue to next instruction 9985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 9986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for handling a return instruction. 9991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This does not return. 9993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_returnFromMethod: 9995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LreturnNew: 9996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, #kInterpEntryReturn 9997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #0 9998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_periodicChecks 9999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(r0, rFP) @ r0<- saveArea (old) 10001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr rFP, [r0, #offStackSaveArea_prevFrame] @ fp = saveArea->prevFrame 10002642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldr r9, [r0, #offStackSaveArea_savedPc] @ r9 = saveArea->savedPc 10003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rFP, #(offStackSaveArea_method - sizeofStackSaveArea)] 10004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ r2<- method we're returning to 10005642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldr r3, [rGLUE, #offGlue_self] @ r3<- glue->self 10006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ is this a break frame? 10007642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldrne r10, [r2, #offMethod_clazz] @ r10<- method->clazz 10008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 @ "want switch" = false 10009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_gotoBail @ break frame, bail out completely 10010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10011642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng PREFETCH_ADVANCE_INST(rINST, r9, 3) @ advance r9, update new rINST 10012642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng str r2, [rGLUE, #offGlue_method]@ glue->method = newSave->method 10013642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng ldr r1, [r10, #offClassObject_pDvmDex] @ r1<- method->clazz->pDvmDex 10014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str rFP, [r3, #offThread_curFrame] @ self->curFrame = fp 10015ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 10016ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldr r3, [r0, #offStackSaveArea_returnAddr] @ r3 = saveArea->returnAddr 10017ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_JIT_PROF_TABLE(r0) 10018ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov rPC, r9 @ publish new rPC 10019ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng str r1, [rGLUE, #offGlue_methodClassDex] 10020ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r3, #0 @ caller is compiled code 10021ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne 1f 10022ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GET_INST_OPCODE(ip) @ extract opcode from rINST 10023ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng cmp r0,#0 10024ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng bne common_updateProfile 10025ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng GOTO_OPCODE(ip) @ jump to next instruction 10026ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng1: 10027ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng ldr rINST, .LdvmCompilerTemplateStart @ rINST is rCBASE in compiled code 10028ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng blx r3 10029ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else 10030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 10031642d9646f0399648e377ed8e1b36eba9b12f84b2Ben Cheng mov rPC, r9 @ publish new rPC 10032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [rGLUE, #offGlue_methodClassDex] 10033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 10034ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 10035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return handling, calls through "glue code". 10038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 10040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LreturnOld: 10041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_FP_TO_GLUE() @ export state 10042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rGLUE @ arg to function 10043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmMterp_returnFromMethod 10044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_resumeAfterGlueCall 10045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 10046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Somebody has thrown an exception. Handle it. 10050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the exception processing code returns to us (instead of falling 10052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out of the interpreter), continue with whatever the next instruction 10053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * now happens to be. 10054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This does not return. 10056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10057ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng .global dvmMterpCommonExceptionThrown 10058ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben ChengdvmMterpCommonExceptionThrown: 10059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_exceptionThrown: 10060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LexceptionNew: 10061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, #kInterpEntryThrow 10062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #0 10063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_periodicChecks 10064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10065ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT) 10066ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng mov r2,#kJitTSelectAbort @ abandon trace selection in progress 10067ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng str r2,[rGLUE,#offGlue_jitState] 10068ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#endif 10069ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng 10070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r10, [rGLUE, #offGlue_self] @ r10<- glue->self 10071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [r10, #offThread_exception] @ r9<- self->exception 10072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- self 10073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- exception 10074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmAddTrackedAlloc @ don't let the exception be GCed 10075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, #0 @ r3<- NULL 10076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r10, #offThread_exception] @ self->exception = NULL 10077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* set up args and a local for "&fp" */ 10079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* (str sp, [sp, #-4]! would be perfect here, but is discouraged) */ 10080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str rFP, [sp, #-4]! @ *--sp = fp 10081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov ip, sp @ ip<- &fp 10082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, #0 @ r3<- false 10083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str ip, [sp, #-4]! @ *--sp = &fp 10084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [rGLUE, #offGlue_method] @ r1<- glue->method 10085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r10 @ r0<- self 10086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r1, #offMethod_insns] @ r1<- method->insns 10087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, r9 @ r2<- exception 10088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r1, rPC, r1 @ r1<- pc - method->insns 10089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, asr #1 @ r1<- offset in code units 10090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* call, r0 gets catchRelPc (a code-unit offset) */ 10092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmFindCatchBlock @ call(self, relPc, exc, scan?, &fp) 10093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* fix earlier stack overflow if necessary; may trash rFP */ 10095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r1, [r10, #offThread_stackOverflowed] 10096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ did we overflow earlier? 10097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq 1f @ no, skip ahead 10098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov rFP, r0 @ save relPc result in rFP 10099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r10 @ r0<- self 10100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmCleanupStackOverflow @ call(self) 10101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rFP @ restore result 10102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 10103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* update frame pointer and check result from dvmFindCatchBlock */ 10105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr rFP, [sp, #4] @ retrieve the updated rFP 10106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is catchRelPc < 0? 10107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add sp, sp, #8 @ restore stack 10108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi .LnotCaughtLocally 10109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* adjust locals to match self->curFrame and updated PC */ 10111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(r1, rFP) @ r1<- new save area 10112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r1, #offStackSaveArea_method] @ r1<- new method 10113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [rGLUE, #offGlue_method] @ glue->method = new method 10114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r1, #offMethod_clazz] @ r2<- method->clazz 10115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r1, #offMethod_insns] @ r3<- method->insns 10116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_pDvmDex] @ r2<- method->clazz->pDvmDex 10117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add rPC, r3, r0, asl #1 @ rPC<- method->insns + catchRelPc 10118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r2, [rGLUE, #offGlue_methodClassDex] @ glue->pDvmDex = meth... 10119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* release the tracked alloc on the exception */ 10121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- exception 10122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- self 10123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmReleaseTrackedAlloc @ release the exception 10124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* restore the exception if the handler wants it */ 10126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() @ load rINST from rPC 10127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 10128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp ip, #OP_MOVE_EXCEPTION @ is it "move-exception"? 10129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project streq r9, [r10, #offThread_exception] @ yes, restore the exception 10130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 10131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LnotCaughtLocally: @ r9=exception, r10=self 10133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* fix stack overflow if necessary */ 10134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r1, [r10, #offThread_stackOverflowed] 10135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ did we overflow earlier? 10136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r0, r10 @ if yes: r0<- self 10137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blne dvmCleanupStackOverflow @ if yes: call(self) 10138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ may want to show "not caught locally" debug messages here 10140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if DVM_SHOW_EXCEPTION >= 2 10141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* call __android_log_print(prio, tag, format, ...) */ 10142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* "Exception %s from %s:%d not caught locally" */ 10143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ dvmLineNumFromPC(method, pc - method->insns) 10144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_method] 10145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offMethod_insns] 10146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r1, rPC, r1 10147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project asr r1, r1, #1 10148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmLineNumFromPC 10149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [sp, #-4]! 10150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ dvmGetMethodSourceFile(method) 10151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_method] 10152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmGetMethodSourceFile 10153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [sp, #-4]! 10154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ exception->clazz->descriptor 10155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r9, #offObject_clazz] 10156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offClassObject_descriptor] 10157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ 10158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, strExceptionNotCaughtLocally 10159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, strLogTag 10160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, #3 @ LOG_DEBUG 10161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __android_log_print 10162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 10163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r9, [r10, #offThread_exception] @ restore exception 10164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- exception 10165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- self 10166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmReleaseTrackedAlloc @ release the exception 10167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 @ "want switch" = false 10168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_gotoBail @ bail out 10169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Exception handling, calls through "glue code". 10173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 10175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LexceptionOld: 10176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_FP_TO_GLUE() @ export state 10177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rGLUE @ arg to function 10178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmMterp_exceptionThrown 10179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_resumeAfterGlueCall 10180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 10181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * After returning from a "glued" function, pull out the updated 10185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * values and start executing at the next instruction. 10186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_resumeAfterGlueCall: 10188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_PC_FP_FROM_GLUE() @ pull rPC and rFP out of glue 10189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() @ load rINST from rPC 10190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 10191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 10192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Invalid array index. 10195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayIndex: 10197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 10198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strArrayIndexException 10199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 10200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 10201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 10202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Invalid array value. 10205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayStore: 10207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 10208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strArrayStoreException 10209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 10210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 10211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 10212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Integer divide or mod by zero. 10215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errDivideByZero: 10217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 10218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strArithmeticException 10219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, strDivideByZero 10220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 10221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 10222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size. 10225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNegativeArraySize: 10227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 10228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strNegativeArraySizeException 10229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 10230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 10231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 10232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Invocation of a non-existent method. 10235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNoSuchMethod: 10237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 10238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strNoSuchMethodError 10239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 10240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 10241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 10242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We encountered a null object when we weren't expecting one. We 10245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * export the PC, throw a NullPointerException, and goto the exception 10246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * processing code. 10247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNullObject: 10249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 10250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strNullPointerException 10251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 10252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 10253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 10254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For debugging, cause an immediate fault. The source address will 10257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be in lr (use a bl instruction to jump here). 10258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_abort: 10260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr pc, .LdeadFood 10261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LdeadFood: 10262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word 0xdeadf00d 10263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Spit out a "we were here", preserving all registers. (The attempt 10266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to save ip won't work, but we need to save an even number of 10267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers for EABI 64-bit stack alignment.) 10268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .macro SQUEAK num 10270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_squeak\num: 10271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 10272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strSqueak 10273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #\num 10274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl printf 10275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 10276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 10277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endm 10278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SQUEAK 0 10280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SQUEAK 1 10281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SQUEAK 2 10282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SQUEAK 3 10283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SQUEAK 4 10284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SQUEAK 5 10285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Spit out the number in r0, preserving registers. 10288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printNum: 10290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 10291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0 10292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strSqueak 10293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl printf 10294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 10295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 10296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Print a newline, preserving registers. 10299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printNewline: 10301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 10302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strNewline 10303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl printf 10304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 10305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 10306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Print the 32-bit quantity in r0 as a hex value, preserving registers. 10309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printHex: 10311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 10312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0 10313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strPrintHex 10314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl printf 10315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 10316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 10317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Print the 64-bit quantity in r0-r1, preserving registers. 10320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printLong: 10322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 10323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r1 10324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, r0 10325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strPrintLong 10326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl printf 10327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 10328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 10329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Print full method info. Pass the Method* in r0. Preserves regs. 10332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printMethod: 10334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 10335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmMterpPrintMethod 10336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 10337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 10338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Call a C helper function that dumps regs and possibly some 10341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * additional info. Requires the C function to be compiled in. 10342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 10344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_dumpRegs: 10345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 10346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmMterpDumpArmRegs 10347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 10348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 10349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 10350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * String references, must be close to the code that uses them. 10354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .align 2 10356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrArithmeticException: 10357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrArithmeticException 10358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrArrayIndexException: 10359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrArrayIndexException 10360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrArrayStoreException: 10361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrArrayStoreException 10362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrDivideByZero: 10363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrDivideByZero 10364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrNegativeArraySizeException: 10365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrNegativeArraySizeException 10366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrNoSuchMethodError: 10367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrNoSuchMethodError 10368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrNullPointerException: 10369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrNullPointerException 10370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrLogTag: 10372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrLogTag 10373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrExceptionNotCaughtLocally: 10374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrExceptionNotCaughtLocally 10375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrNewline: 10377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrNewline 10378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrSqueak: 10379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrSqueak 10380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrPrintHex: 10381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrPrintHex 10382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrPrintLong: 10383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrPrintLong 10384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 10386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Zero-terminated ASCII string data. 10387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On ARM we have two choices: do like gcc does, and LDR from a .word 10389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * with the address, or use an ADR pseudo-op to get the address 10390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * directly. ADR saves 4 bytes and an indirection, but it's using a 10391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * PC-relative addressing mode and hence has a limited range, which 10392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * makes it not work well with mergeable string sections. 10393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .section .rodata.str1.4,"aMS",%progbits,1 10395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrBadEntryPoint: 10397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Bad entry point %d\n" 10398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArithmeticException: 10399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArithmeticException;" 10400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArrayIndexException: 10401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArrayIndexOutOfBoundsException;" 10402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArrayStoreException: 10403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArrayStoreException;" 10404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrClassCastException: 10405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ClassCastException;" 10406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrDivideByZero: 10407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "divide by zero" 10408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrFilledNewArrayNotImpl: 10409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "filled-new-array only implemented for objects and 'int'" 10410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInternalError: 10411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InternalError;" 10412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInstantiationError: 10413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InstantiationError;" 10414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNegativeArraySizeException: 10415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NegativeArraySizeException;" 10416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNoSuchMethodError: 10417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NoSuchMethodError;" 10418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNullPointerException: 10419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NullPointerException;" 10420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrLogTag: 10422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "mterp" 10423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrExceptionNotCaughtLocally: 10424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Exception %s from %s:%d not caught locally\n" 10425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNewline: 10427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "\n" 10428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrSqueak: 10429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "<%d>" 10430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrPrintHex: 10431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "<0x%x>" 10432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrPrintLong: 10433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "<%lld>" 10434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10436