InterpAsm-armv4t.S revision 3a1aedbc9777eab6275a360b93b81b079464238e
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2d7bf3656e8c57e630aec26aa29eeea3eb4ca99abAndy McFadden * This file was generated automatically by gen-mterp.py for 'armv4t'. 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 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectCallee must save/restore r4+ (except r12) if it modifies them. 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectStack is "full descending". Only the arguments that don't fit in the first 4 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectregisters are placed on the stack. "sp" points at the first stacked argument 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project(i.e. the 5th arg). 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectVFP: single-precision results in s0, double-precision results in d0. 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectIn the EABI, "sp" must be 64-bit aligned on entry to a function, and any 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project64-bit quantities (long long, double) must be 64-bit aligned. 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectMterp and ARM notes: 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectThe following registers have fixed assignments: 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project reg nick purpose 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project r4 rPC interpreted program counter, used for fetching instructions 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project r5 rFP interpreted frame pointer, used for accessing locals and args 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project r6 rGLUE MterpGlue pointer 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project r7 rIBASE interpreted instruction base pointer, used for computed goto 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project r8 rINST first 16-bit code unit of current instruction 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectMacros are provided for common operations. Each macro MUST emit only 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectone instruction to make instruction-counting easier. They MUST NOT alter 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectunspecified registers or condition codes. 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* single-purpose registers, given names for clarity */ 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rPC r4 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rFP r5 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rGLUE r6 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rIBASE r7 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rINST r8 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* save/restore the PC and/or FP from the glue struct */ 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOAD_PC_FROM_GLUE() ldr rPC, [rGLUE, #offGlue_pc] 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVE_PC_TO_GLUE() str rPC, [rGLUE, #offGlue_pc] 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOAD_FP_FROM_GLUE() ldr rFP, [rGLUE, #offGlue_fp] 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVE_FP_TO_GLUE() str rFP, [rGLUE, #offGlue_fp] 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOAD_PC_FP_FROM_GLUE() ldmia rGLUE, {rPC, rFP} 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVE_PC_FP_TO_GLUE() stmia rGLUE, {rPC, rFP} 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "export" the PC to the stack frame, f/b/o future exception objects. Must 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be done *before* something calls dvmThrowException. 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "SAVEAREA_FROM_FP(fp)->xtra.currentPc = pc", i.e. 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fp - sizeof(StackSaveArea) + offsetof(SaveArea, xtra.currentPc) 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * It's okay to do this more than once. 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define EXPORT_PC() \ 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str rPC, [rFP, #(-sizeofStackSaveArea + offStackSaveArea_currentPc)] 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Given a frame pointer, find the stack save area. 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "((StackSaveArea*)(_fp) -1)". 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVEAREA_FROM_FP(_reg, _fpreg) \ 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub _reg, _fpreg, #sizeofStackSaveArea 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch the next instruction from rPC into rINST. Does not advance rPC. 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_INST() ldrh rINST, [rPC] 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch the next instruction from the specified offset. Advances rPC 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to point to the next instruction. "_count" is in 16-bit code units. 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Because of the limited size of immediate constants on ARM, this is only 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * suitable for small forward movements (i.e. don't try to implement "goto" 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * with this). 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This must come AFTER anything that can throw an exception, or the 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * exception catch may miss. (This also implies that it must come after 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * EXPORT_PC().) 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_ADVANCE_INST(_count) ldrh rINST, [rPC, #(_count*2)]! 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 1273a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden * The operation performed here is similar to FETCH_ADVANCE_INST, except the 1283a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden * src and dest registers are parameterized (not hard-wired to rPC and rINST). 1293a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden */ 1303a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden#define PREFETCH_ADVANCE_INST(_dreg, _sreg, _count) \ 1313a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldrh _dreg, [_sreg, #(_count*2)]! 1323a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden 1333a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden/* 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch the next instruction from an offset specified by _reg. Updates 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC to point to the next instruction. "_reg" must specify the distance 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in bytes, *not* 16-bit code units, and may be a signed value. 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We want to write "ldrh rINST, [rPC, _reg, lsl #2]!", but some of the 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bits that hold the shift distance are used for the half/byte/sign flags. 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In some cases we can pre-double _reg for free, so we require a byte offset 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * here. 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_ADVANCE_INST_RB(_reg) ldrh rINST, [rPC, _reg]! 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch a half-word code unit from an offset past the current PC. The 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "_count" value is in 16-bit code units. Does not advance rPC. 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The "_S" variant works the same but treats the value as signed. 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH(_reg, _count) ldrh _reg, [rPC, #(_count*2)] 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_S(_reg, _count) ldrsh _reg, [rPC, #(_count*2)] 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch one byte from an offset past the current PC. Pass in the same 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "_count" as you would for FETCH, and an additional 0/1 indicating which 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * byte of the halfword you want (lo/hi). 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_B(_reg, _count, _byte) ldrb _reg, [rPC, #(_count*2+_byte)] 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Put the instruction's opcode field into the specified register. 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GET_INST_OPCODE(_reg) and _reg, rINST, #255 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 1673a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden * Put the prefetched instruction's opcode field into the specified register. 1683a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden */ 1693a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden#define GET_PREFETCHED_OPCODE(_oreg, _ireg) and _oreg, _ireg, #255 1703a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden 1713a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden/* 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Begin executing the opcode in _reg. Because this only jumps within the 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * interpreter, we don't have to worry about pre-ARMv5 THUMB interwork. 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GOTO_OPCODE(_reg) add pc, rIBASE, _reg, lsl #6 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get/set the 32-bit value from a Dalvik register. 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GET_VREG(_reg, _vreg) ldr _reg, [rFP, _vreg, lsl #2] 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SET_VREG(_reg, _vreg) str _reg, [rFP, _vreg, lsl #2] 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is a #include, not a %include, because we want the C pre-processor 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to expand the macros into assembler assignment statements. 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "../common/asm-constants.h" 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/platform.S */ 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * CPU-version-specific defines 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Macro for "LDR PC,xxx", which is not allowed pre-ARMv5. Essentially a 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * one-way branch. 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * May modify IP. Does not modify LR. 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.macro LDR_PC source 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr pc, \source 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Macro for "MOV LR,PC / LDR PC,xxx", which is not allowed pre-ARMv5. 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Jump to subroutine. 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * May modify IP and LR. 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.macro LDR_PC_LR source 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov lr, pc 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr pc, \source 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Macro for "LDMFD SP!, {...regs...,PC}". 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * May modify IP and LR. 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.macro LDMFD_PC regs 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {\regs,pc} 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/entry.S */ 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interpreter entry point. 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't have formal stack frames, so gdb scans upward in the code 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to find the start of the function (a label with the %function type), 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and then looks at the next few instructions to figure out what 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * got pushed onto the stack. From this it figures out how to restore 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the registers, including PC, for the previous stack frame. If gdb 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sees a non-function label, it stops scanning, so either we need to 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * have nothing but assembler-local labels between the entry point and 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the break, or we need to fake it out. 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * When this is defined, we add some stuff to make gdb less confused. 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define ASSIST_DEBUGGER 1 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .align 2 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdRun 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdRun, %function 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 MterpGlue* glue 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This function returns a boolean "changeInterp" value. The return comes 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * via a call to dvmMterpStdBail(). 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdRun: 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define MTERP_ENTRY1 \ 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .save {r4-r10,fp,lr}; \ 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r4-r10,fp,lr} @ save 9 regs 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define MTERP_ENTRY2 \ 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .pad #4; \ 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub sp, sp, #4 @ align 64 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .fnstart 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MTERP_ENTRY1 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MTERP_ENTRY2 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* save stack pointer, add magic word for debuggerd */ 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str sp, [r0, #offGlue_bailPtr] @ save SP for eventual return 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* set up "named" registers, figure out entry point */ 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov rGLUE, r0 @ set rGLUE 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r1, [r0, #offGlue_entryPoint] @ InterpEntry enum is char 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_PC_FP_FROM_GLUE() @ load rPC and rFP from "glue" 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adr rIBASE, dvmAsmInstructionStart @ set rIBASE 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #kInterpEntryInstr @ usual case? 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .Lnot_instr @ no, handle it 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* start executing the instruction at rPC */ 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() @ load rINST from rPC 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lnot_instr: 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #kInterpEntryReturn @ were we returning from a method? 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_returnFromMethod 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lnot_return: 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #kInterpEntryThrow @ were we throwing an exception? 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lbad_arg: 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strBadEntryPoint 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ r1 holds value of entryPoint 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl printf 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmAbort 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .fnend 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdBail 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdBail, %function 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Restore the stack pointer and PC from the save point established on entry. 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is essentially the same as a longjmp, but should be cheaper. The 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * last instruction causes us to return to whoever called dvmMterpStdRun. 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We pushed some registers on the stack in dvmMterpStdRun, then saved 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * SP and LR. Here we restore SP, restore the registers, and then restore 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * LR to PC. 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 MterpGlue* glue 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 bool changeInterp 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdBail: 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr sp, [r0, #offGlue_bailPtr] @ sp<- saved SP 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r1 @ return the changeInterp value 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add sp, sp, #4 @ un-align 64 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LDMFD_PC "r4-r10,fp" @ restore 9 regs and return 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * String references. 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrBadEntryPoint: 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrBadEntryPoint 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmInstructionStart 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmAsmInstructionStart, %function 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionStart = .L_OP_NOP 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOP: /* 0x00 */ 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NOP.S */ 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance to next instr, load rINST 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute it 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef ASSIST_DEBUGGER 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* insert fake function header to help gdb find the stack frame */ 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dalvik_inst, %function 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectdalvik_inst: 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .fnstart 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MTERP_ENTRY1 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MTERP_ENTRY2 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .fnend 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE: /* 0x01 */ 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE.S */ 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B from 15:12 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A from 11:8 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[B] 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[A]<- r2 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute next instruction 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_FROM16: /* 0x02 */ 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_FROM16.S */ 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[BBBB] 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[AA]<- r2 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_16: /* 0x03 */ 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_16.S */ 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- AAAA 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[BBBB] 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[AAAA]<- r2 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE: /* 0x04 */ 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_WIDE.S */ 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide vA, vB */ 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A(+) 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[A] 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- fp[B] 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r2, {r0-r1} @ fp[A]<- r0/r1 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_FROM16: /* 0x05 */ 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_WIDE_FROM16.S */ 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/from16 vAA, vBBBB */ 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 1) @ r3<- BBBB 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[BBBB] 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[AA] 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- fp[BBBB] 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r2, {r0-r1} @ fp[AA]<- r0/r1 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_16: /* 0x06 */ 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_WIDE_16.S */ 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/16 vAAAA, vBBBB */ 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 2) @ r3<- BBBB 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r2, 1) @ r2<- AAAA 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[BBBB] 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[AAAA] 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- fp[BBBB] 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r2, {r0-r1} @ fp[AAAA]<- r0/r1 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT: /* 0x07 */ 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_OBJECT.S */ 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE.S */ 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B from 15:12 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A from 11:8 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[B] 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[A]<- r2 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute next instruction 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_FROM16: /* 0x08 */ 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_OBJECT_FROM16.S */ 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_FROM16.S */ 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[BBBB] 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[AA]<- r2 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_16: /* 0x09 */ 509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_OBJECT_16.S */ 510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_16.S */ 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB 514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- AAAA 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[BBBB] 517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[AAAA]<- r2 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT: /* 0x0a */ 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_RESULT.S */ 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_retval] @ r0<- glue->retval.i 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[AA]<- r0 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_WIDE: /* 0x0b */ 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_RESULT_WIDE.S */ 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-result-wide vAA */ 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rGLUE, #offGlue_retval @ r3<- &glue->retval 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[AA] 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- retval.j 546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r2, {r0-r1} @ fp[AA]<- r0/r1 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_OBJECT: /* 0x0c */ 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_RESULT_OBJECT.S */ 556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_RESULT.S */ 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_retval] @ r0<- glue->retval.i 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[AA]<- r0 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_EXCEPTION: /* 0x0d */ 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE_EXCEPTION.S */ 572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-exception vAA */ 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offThread_exception] @ r3<- dvmGetException bypass 576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 @ r1<- 0 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r3, r2) @ fp[AA]<- exception obj 579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offThread_exception] @ dvmClearException bypass 581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_VOID: /* 0x0e */ 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN_VOID.S */ 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_returnFromMethod 589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN: /* 0x0f */ 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN.S */ 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vAA 604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [rGLUE, #offGlue_retval] @ retval.i <- vAA 605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_returnFromMethod 606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_WIDE: /* 0x10 */ 611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN_WIDE.S */ 612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 64-bit value. Copies the return value into the "glue" 614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* return-wide vAA */ 617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[AA] 619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rGLUE, #offGlue_retval @ r3<- &glue->retval 620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1 <- vAA/vAA+1 621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r3, {r0-r1} @ retval<- r0/r1 622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_returnFromMethod 623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_OBJECT: /* 0x11 */ 628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN_OBJECT.S */ 629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RETURN.S */ 630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vAA 639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [rGLUE, #offGlue_retval] @ retval.i <- vAA 640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_returnFromMethod 641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_4: /* 0x12 */ 647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_4.S */ 648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/4 vA, #+B */ 649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsl #16 @ r1<- Bxxx0000 650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, asr #28 @ r1<- sssssssB (sign-extended) 653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r0) @ fp[A]<- r1 656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute next instruction 657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_16: /* 0x13 */ 662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_16.S */ 663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/16 vAA, #+BBBB */ 664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r0, 1) @ r0<- ssssBBBB (sign-extended) 665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r3) @ vAA<- r0 668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST: /* 0x14 */ 675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST.S */ 676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const vAA, #+BBBBbbbb */ 677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- bbbb (low) 679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB (high) 680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, lsl #16 @ r0<- BBBBbbbb 682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r3) @ vAA<- r0 684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_HIGH16: /* 0x15 */ 690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_HIGH16.S */ 691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/high16 vAA, #+BBBB0000 */ 692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- 0000BBBB (zero-extended) 693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsl #16 @ r0<- BBBB0000 695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r3) @ vAA<- r0 697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_16: /* 0x16 */ 704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_WIDE_16.S */ 705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/16 vAA, #+BBBB */ 706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r0, 1) @ r0<- ssssBBBB (sign-extended) 707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0, asr #31 @ r1<- ssssssss 709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[AA] 711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r3, {r0-r1} @ vAA<- r0/r1 713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_32: /* 0x17 */ 719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_WIDE_32.S */ 720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/32 vAA, #+BBBBbbbb */ 721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- 0000bbbb (low) 722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r2, 2) @ r2<- ssssBBBB (high) 724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r2, lsl #16 @ r0<- BBBBbbbb 726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[AA] 727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0, asr #31 @ r1<- ssssssss 728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r3, {r0-r1} @ vAA<- r0/r1 730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE: /* 0x18 */ 736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_WIDE.S */ 737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide vAA, #+HHHHhhhhBBBBbbbb */ 738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- bbbb (low) 739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB (low middle) 740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r2, 3) @ r2<- hhhh (high middle) 741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, lsl #16 @ r0<- BBBBbbbb (low word) 742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 4) @ r3<- HHHH (high) 743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r2, r3, lsl #16 @ r1<- HHHHhhhh (high word) 745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(5) @ advance rPC, load rINST 746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA<- r0/r1 749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_HIGH16: /* 0x19 */ 755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_WIDE_HIGH16.S */ 756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/high16 vAA, #+BBBB000000000000 */ 757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- 0000BBBB (zero-extended) 758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, #0 @ r0<- 00000000 760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, lsl #16 @ r1<- BBBB0000 761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[AA] 763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r3, {r0-r1} @ vAA<- r0/r1 765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING: /* 0x1a */ 771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_STRING.S */ 772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBB */ 773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- glue->methodClassDex 775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResStrings] @ r2<- dvmDex->pResStrings 777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- pResStrings[BBBB] 778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ not yet resolved? 779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_CONST_STRING_resolve 780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING_JUMBO: /* 0x1b */ 788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_STRING_JUMBO.S */ 789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBBBBBB */ 790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- bbbb (low) 791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB (high) 792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- glue->methodClassDex 793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResStrings] @ r2<- dvmDex->pResStrings 795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r0, r1, lsl #16 @ r1<- BBBBbbbb 796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- pResStrings[BBBB] 797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_CONST_STRING_JUMBO_resolve 799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_CLASS: /* 0x1c */ 807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CONST_CLASS.S */ 808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/class vAA, Class@BBBB */ 809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- glue->methodClassDex 811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResClasses] @ r2<- dvmDex->pResClasses 813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- pResClasses[BBBB] 814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ not yet resolved? 815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_CONST_CLASS_resolve 816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_ENTER: /* 0x1d */ 824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MONITOR_ENTER.S */ 825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Synchronize on an object. 827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-enter vAA */ 829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- vAA (object) 831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ null object? 8333a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden EXPORT_PC() @ need for precise GC, MONITOR_TRACKING 834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null object, throw an exception 835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmLockObject @ call(self, obj) 837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef WITH_DEADLOCK_PREDICTION /* implies WITH_MONITOR_TRACKING */ 838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offThread_exception] @ check for exception 840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_exceptionThrown @ exception raised, bail out 842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_EXIT: /* 0x1e */ 850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MONITOR_EXIT.S */ 851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlock an object. 853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Exceptions that occur when unlocking a monitor need to appear as 855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if they happened at the following instruction. See the Dalvik 856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction spec. 857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-exit vAA */ 859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ before fetch: export the PC 861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- vAA (object) 862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ null object? 863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes 864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmUnlockObject @ r0<- success for unlock(self, obj) 866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, exception is pending 868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ before throw: advance rPC, load rINST 869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CHECK_CAST: /* 0x1f */ 876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CHECK_CAST.S */ 877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if a cast from one class to another is allowed. 879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* check-cast vAA, class@BBBB */ 881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r2, 1) @ r2<- BBBB 883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r3) @ r9<- object 884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_methodClassDex] @ r0<- pDvmDex 885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ is object null? 886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offDvmDex_pResClasses] @ r0<- pDvmDex->pResClasses 887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_CHECK_CAST_okay @ null obj, cast always succeeds 888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, r2, lsl #2] @ r1<- resolved class 889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, #offObject_clazz] @ r0<- obj->clazz 890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ have we resolved this before? 891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_CHECK_CAST_resolve @ not resolved, do it now 892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolved: 893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, r1 @ same class (trivial success)? 894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_CHECK_CAST_fullcheck @ no, do full check 895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_okay: 896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INSTANCE_OF: /* 0x20 */ 903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INSTANCE_OF.S */ 904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if an object reference is an instance of a class. 906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Most common situation is a non-null object, being compared against 908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an already-resolved class. 909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* instance-of vA, vB, class@CCCC */ 911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB (object) 914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 @ r9<- A 915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is object null? 916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- pDvmDex 917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_INSTANCE_OF_store @ null obj, not an instance, store r0 918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 1) @ r3<- CCCC 919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResClasses] @ r2<- pDvmDex->pResClasses 920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r2, r3, lsl #2] @ r1<- resolved class 921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offObject_clazz] @ r0<- obj->clazz 922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ have we resolved this before? 923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_INSTANCE_OF_resolve @ not resolved, do it now 924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolved: @ r0=obj->clazz, r1=resolved class 925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, r1 @ same class (trivial success)? 926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_INSTANCE_OF_trivial @ yes, trivial finish 927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_INSTANCE_OF_fullcheck @ no, do full check 928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ARRAY_LENGTH: /* 0x21 */ 932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ARRAY_LENGTH.S */ 933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the length of an array. 935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- vB (object ref) 939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is object null? 941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yup, fail 942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- array length 944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r3, r2) @ vB<- length 946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_INSTANCE: /* 0x22 */ 952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEW_INSTANCE.S */ 953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new instance of a class. 955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-instance vAA, class@BBBB */ 957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResClasses] @ r3<- pDvmDex->pResClasses 960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved class 961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ req'd for init, resolve, alloc 962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_NEW_INSTANCE_resolve @ no, resolve it now 964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolved: @ r0=class 965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r1, [r0, #offClassObject_status] @ r1<- ClassStatus enum 966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #CLASS_INITIALIZED @ has class been initialized? 967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_NEW_INSTANCE_needinit @ no, init class now 968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_initialized: @ r0=class 969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offClassObject_accessFlags] @ r3<- clazz->accessFlags 970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project tst r3, #(ACC_INTERFACE|ACC_ABSTRACT) @ abstract or interface? 971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #ALLOC_DONT_TRACK @ flags for alloc call 972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_NEW_INSTANCE_finish @ concrete class, continue 973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_NEW_INSTANCE_abstract @ fail 974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_ARRAY: /* 0x23 */ 978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEW_ARRAY.S */ 979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Allocate an array of objects, specified with the array class 981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and a count. 982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The verifier guarantees that this is an array class, so we don't 984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check for it here. 985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-array vA, vB, class@CCCC */ 987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r2, 1) @ r2<- CCCC 989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r0) @ r1<- vB (array length) 991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResClasses] @ r3<- pDvmDex->pResClasses 992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ check length 993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r2, lsl #2] @ r0<- resolved class 994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_errNegativeArraySize @ negative length, bail 995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ req'd for resolve, alloc 997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_NEW_ARRAY_finish @ resolved, continue 998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_NEW_ARRAY_resolve @ do resolve now 999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY: /* 0x24 */ 1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FILLED_NEW_ARRAY.S */ 1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResClasses] @ r3<- pDvmDex->pResClasses 1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ need for resolve and alloc 1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved class 1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r10, rINST, lsr #8 @ r10<- AA or BA 1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_FILLED_NEW_ARRAY_continue @ yes, continue on 1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ r2<- false 1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- call(clazz, ref) 1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_FILLED_NEW_ARRAY_continue 1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY_RANGE: /* 0x25 */ 1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FILLED_NEW_ARRAY_RANGE.S */ 1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FILLED_NEW_ARRAY.S */ 1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResClasses] @ r3<- pDvmDex->pResClasses 1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ need for resolve and alloc 1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved class 1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r10, rINST, lsr #8 @ r10<- AA or BA 1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_FILLED_NEW_ARRAY_RANGE_continue @ yes, continue on 1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ r2<- false 1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- call(clazz, ref) 1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_FILLED_NEW_ARRAY_RANGE_continue 1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILL_ARRAY_DATA: /* 0x26 */ 1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FILL_ARRAY_DATA.S */ 1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* fill-array-data vAA, +BBBBBBBB */ 1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- bbbb (lo) 1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB (hi) 1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r0, r1, lsl #16 @ r1<- BBBBbbbb 1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vAA (array object) 1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rPC, r1, lsl #1 @ r1<- PC + BBBBbbbb*2 (array data off.) 1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC(); 1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmInterpHandleFillArrayData@ fill the array with predefined data 1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ 0 means an exception is thrown 1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ has exception 1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_THROW: /* 0x27 */ 1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_THROW.S */ 1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception object in the current thread. 1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* throw vAA */ 1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- vAA (exception object) 1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ null object? 1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, throw an NPE instead 1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ bypass dvmSetException, just store it 1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offThread_exception] @ thread->exception<- obj 1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO: /* 0x28 */ 1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_GOTO.S */ 1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 8-bit offset. 1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset, which we need to 1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * double to get a byte offset. 1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto +AA */ 1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsl #16 @ r0<- AAxx0000 1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r0, asr #24 @ r9<- ssssssAA (sign-extended) 1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r9, lsl #1 @ r9<- byte offset 1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_16: /* 0x29 */ 1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_GOTO_16.S */ 1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 16-bit offset. 1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset, which we need to 1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * double to get a byte offset. 1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/16 +AAAA */ 1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r0, 1) @ r0<- ssssAAAA (sign-extended) 1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r0, asl #1 @ r9<- byte offset, check sign 1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_32: /* 0x2a */ 1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_GOTO_32.S */ 1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 32-bit offset. 1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset, which we need to 1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * double to get a byte offset. 1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlike most opcodes, this one is allowed to branch to itself, so 1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * our "backward branch" test must be "<=0" instead of "<0". The ORRS 1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction doesn't affect the V flag, so we need to clear it 1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * explicitly. 1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/32 +AAAAAAAA */ 1148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- aaaa (lo) 1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- AAAA (hi) 1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp ip, ip @ (clear V flag during stall) 1151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs r0, r0, r1, lsl #16 @ r0<- AAAAaaaa, check sign 1152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r0, asl #1 @ r9<- byte offset 1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ble common_backwardBranch @ backward branch, do periodic checks 1154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_PACKED_SWITCH: /* 0x2b */ 1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_PACKED_SWITCH.S */ 1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- bbbb (lo) 1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB (hi) 1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, lsl #16 @ r0<- BBBBbbbb 1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vAA 1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, rPC, r0, lsl #1 @ r0<- PC + BBBBbbbb*2 1179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmInterpHandlePackedSwitch @ r0<- code-unit branch offset 1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r0, asl #1 @ r9<- branch byte offset, check sign 1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_backwardBranch @ (want to use BLE but V is unknown) 1183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPARSE_SWITCH: /* 0x2c */ 1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPARSE_SWITCH.S */ 1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_PACKED_SWITCH.S */ 1193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 1195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- bbbb (lo) 1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- BBBB (hi) 1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, lsl #16 @ r0<- BBBBbbbb 1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vAA 1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, rPC, r0, lsl #1 @ r0<- PC + BBBBbbbb*2 1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmInterpHandleSparseSwitch @ r0<- code-unit branch offset 1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r0, asl #1 @ r9<- branch byte offset, check sign 1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_backwardBranch @ (want to use BLE but V is unknown) 1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_FLOAT: /* 0x2d */ 1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPL_FLOAT.S */ 1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two floating-point values. Puts 0, 1, or -1 into the 1225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * destination register based on the results of the comparison. 1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Provide a "naninst" instruction that puts 1 or -1 into r1 depending 1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on what value we'd like to return when one of the operands is NaN. 1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The operation we're implementing is: 1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if (x == y) 1232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return 0; 1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * else if (x < y) 1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return -1; 1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * else if (x > y) 1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return 1; 1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * else 1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return {-1,1}; // one or both operands was NaN 1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The straightforward implementation requires 3 calls to functions 1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that return a result in r0. We can do it with two calls if our 1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * EABI library supports __aeabi_cfcmple (only one if we want to check 1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for NaN directly): 1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check x <= y 1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if <, return -1 1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if ==, return 0 1247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check y <= x 1248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if <, return 1 1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return {-1,1} 1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: cmpl-float, cmpg-float 1252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 1255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 1256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r2) @ r9<- vBB 1258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r10, r3) @ r10<- vCC 1259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ copy to arg registers 1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cfcmple @ cmp <=: C clear if <, Z set if eq 1262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bhi .LOP_CMPL_FLOAT_gt_or_nan @ C set and Z clear, disambiguate 1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvncc r1, #0 @ (less than) r1<- -1 1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project moveq r1, #0 @ (equal) r1<- 0, trumps less than 1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_finish: 1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r3) @ vAA<- r1 1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_FLOAT: /* 0x2e */ 1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPG_FLOAT.S */ 1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPL_FLOAT.S */ 1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two floating-point values. Puts 0, 1, or -1 into the 1279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * destination register based on the results of the comparison. 1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Provide a "naninst" instruction that puts 1 or -1 into r1 depending 1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on what value we'd like to return when one of the operands is NaN. 1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The operation we're implementing is: 1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if (x == y) 1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return 0; 1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * else if (x < y) 1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return -1; 1289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * else if (x > y) 1290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return 1; 1291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * else 1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return {-1,1}; // one or both operands was NaN 1293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The straightforward implementation requires 3 calls to functions 1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that return a result in r0. We can do it with two calls if our 1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * EABI library supports __aeabi_cfcmple (only one if we want to check 1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for NaN directly): 1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check x <= y 1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if <, return -1 1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if ==, return 0 1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check y <= x 1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if <, return 1 1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return {-1,1} 1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: cmpl-float, cmpg-float 1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 1311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r2) @ r9<- vBB 1312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r10, r3) @ r10<- vCC 1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ copy to arg registers 1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cfcmple @ cmp <=: C clear if <, Z set if eq 1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bhi .LOP_CMPG_FLOAT_gt_or_nan @ C set and Z clear, disambiguate 1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvncc r1, #0 @ (less than) r1<- -1 1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project moveq r1, #0 @ (equal) r1<- 0, trumps less than 1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_finish: 1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r3) @ vAA<- r1 1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_DOUBLE: /* 0x2f */ 1330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPL_DOUBLE.S */ 1331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two floating-point values. Puts 0, 1, or -1 into the 1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * destination register based on the results of the comparison. 1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Provide a "naninst" instruction that puts 1 or -1 into r1 depending 1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on what value we'd like to return when one of the operands is NaN. 1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See OP_CMPL_FLOAT for an explanation. 1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: cmpl-double, cmpg-double 1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r0, #255 @ r9<- BB 1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r10, r0, lsr #8 @ r10<- CC 1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[BB] 1347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r10, rFP, r10, lsl #2 @ r10<- &fp[CC] 1348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vBB/vBB+1 1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r10, {r2-r3} @ r2/r3<- vCC/vCC+1 1350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cdcmple @ cmp <=: C clear if <, Z set if eq 1351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bhi .LOP_CMPL_DOUBLE_gt_or_nan @ C set and Z clear, disambiguate 1352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvncc r1, #0 @ (less than) r1<- -1 1353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project moveq r1, #0 @ (equal) r1<- 0, trumps less than 1354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_finish: 1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r3) @ vAA<- r1 1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_DOUBLE: /* 0x30 */ 1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPG_DOUBLE.S */ 1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMPL_DOUBLE.S */ 1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two floating-point values. Puts 0, 1, or -1 into the 1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * destination register based on the results of the comparison. 1369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Provide a "naninst" instruction that puts 1 or -1 into r1 depending 1371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on what value we'd like to return when one of the operands is NaN. 1372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See OP_CMPL_FLOAT for an explanation. 1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: cmpl-double, cmpg-double 1376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 1379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r0, #255 @ r9<- BB 1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r10, r0, lsr #8 @ r10<- CC 1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[BB] 1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r10, rFP, r10, lsl #2 @ r10<- &fp[CC] 1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vBB/vBB+1 1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r10, {r2-r3} @ r2/r3<- vCC/vCC+1 1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cdcmple @ cmp <=: C clear if <, Z set if eq 1386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bhi .LOP_CMPG_DOUBLE_gt_or_nan @ C set and Z clear, disambiguate 1387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvncc r1, #0 @ (less than) r1<- -1 1388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project moveq r1, #0 @ (equal) r1<- 0, trumps less than 1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_finish: 1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r3) @ vAA<- r1 1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMP_LONG: /* 0x31 */ 1400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_CMP_LONG.S */ 1401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two 64-bit values. Puts 0, 1, or -1 into the destination 1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * register based on the results of the comparison. 1404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We load the full values with LDM, but in practice many values could 1406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be resolved by only looking at the high word. This could be made 1407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * faster or slower by splitting the LDM into a pair of LDRs. 1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If we just wanted to set condition flags, we could do this: 1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * subs ip, r0, r2 1411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sbcs ip, r1, r3 1412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * subeqs ip, r0, r2 1413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Leaving { <0, 0, >0 } in ip. However, we have to set it to a specific 1414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * integer value, which we can do with 2 conditional mov/mvn instructions 1415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (set 1, set -1; if they're equal we already have 0 in ip), giving 1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * us a constant 5-cycle path plus a branch at the end to the 1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction epilogue code. The multi-compare approach below needs 1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2 or 3 cycles + branch if the high word doesn't match, 6 + branch 1419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in the worst case (the 64-bit values are equal). 1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* cmp-long vAA, vBB, vCC */ 1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 1430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare (vBB+1, vCC+1) 1431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blt .LOP_CMP_LONG_less @ signed compare on high part 1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bgt .LOP_CMP_LONG_greater 1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r1, r0, r2 @ r1<- r0 - r2 1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bhi .LOP_CMP_LONG_greater @ unsigned compare on low part 1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_CMP_LONG_less 1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_CMP_LONG_finish @ equal; r1 already holds 0 1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQ: /* 0x32 */ 1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_EQ.S */ 1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */ 1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r1) @ r3<- vB 1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vA 1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (vA, vB) 1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f @ branch to 1 if comparison failed 1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ yes, do periodic checks 1462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NE: /* 0x33 */ 1471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_NE.S */ 1472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */ 1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 1483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 1484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r1) @ r3<- vB 1485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vA 1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (vA, vB) 1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq 1f @ branch to 1 if comparison failed 1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ yes, do periodic checks 1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LT: /* 0x34 */ 1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_LT.S */ 1502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */ 1503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 1512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 1513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 1514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r1) @ r3<- vB 1515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vA 1516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (vA, vB) 1518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bge 1f @ branch to 1 if comparison failed 1519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ yes, do periodic checks 1522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GE: /* 0x35 */ 1531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_GE.S */ 1532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */ 1533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 1542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 1544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r1) @ r3<- vB 1545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vA 1546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (vA, vB) 1548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blt 1f @ branch to 1 if comparison failed 1549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ yes, do periodic checks 1552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GT: /* 0x36 */ 1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_GT.S */ 1562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */ 1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 1572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 1573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 1574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r1) @ r3<- vB 1575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vA 1576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (vA, vB) 1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ble 1f @ branch to 1 if comparison failed 1579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ yes, do periodic checks 1582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LE: /* 0x37 */ 1591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_LE.S */ 1592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/bincmp.S */ 1593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A+ 1602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 1603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 1604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r1) @ r3<- vB 1605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vA 1606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (vA, vB) 1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bgt 1f @ branch to 1 if comparison failed 1609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ yes, do periodic checks 1612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQZ: /* 0x38 */ 1621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_EQZ.S */ 1622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */ 1623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 1632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vAA 1633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ compare (vA, 0) 1635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f @ branch to 1 if comparison failed 1636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NEZ: /* 0x39 */ 1648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_NEZ.S */ 1649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */ 1650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 1659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vAA 1660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ compare (vA, 0) 1662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq 1f @ branch to 1 if comparison failed 1663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 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_LTZ: /* 0x3a */ 1675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_LTZ.S */ 1676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */ 1677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-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-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 1686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vAA 1687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ compare (vA, 0) 1689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bge 1f @ branch to 1 if comparison failed 1690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GEZ: /* 0x3b */ 1702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_GEZ.S */ 1703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */ 1704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 1713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vAA 1714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ compare (vA, 0) 1716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blt 1f @ branch to 1 if comparison failed 1717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GTZ: /* 0x3c */ 1729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_GTZ.S */ 1730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */ 1731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 1740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vAA 1741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ compare (vA, 0) 1743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ble 1f @ branch to 1 if comparison failed 1744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LEZ: /* 0x3d */ 1756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IF_LEZ.S */ 1757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/zcmp.S */ 1758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 1767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vAA 1768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #4 @ r0<- BYTE branch dist for not-taken 1769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ compare (vA, 0) 1770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bgt 1f @ branch to 1 if comparison failed 1771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r9, 1) @ r9<- branch offset, in code units 1772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r9, r9, asl #1 @ convert to bytes, check sign 1773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi common_backwardBranch @ backward branch, do periodic checks 1774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 1775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3E: /* 0x3e */ 1783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_3E.S */ 1784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 1785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 1786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3F: /* 0x3f */ 1792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_3F.S */ 1793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 1794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 1795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_40: /* 0x40 */ 1801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_40.S */ 1802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 1803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 1804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_41: /* 0x41 */ 1810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_41.S */ 1811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 1812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 1813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_42: /* 0x42 */ 1819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_42.S */ 1820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 1821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 1822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_43: /* 0x43 */ 1828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_43.S */ 1829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 1830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 1831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET: /* 0x44 */ 1837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */ 1838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 1842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 1843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 1848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 1849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 1850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 1851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 1852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 1853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 1854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 1855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #2 @ r0<- arrayObj + index*width 1856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 1857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 1858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 1859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC] 1860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r9) @ vAA<- r2 1862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_WIDE: /* 0x45 */ 1868d7bf3656e8c57e630aec26aa29eeea3eb4ca99abAndy McFadden/* File: armv4t/OP_AGET_WIDE.S */ 1869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 64 bits. vAA <- vBB[vCC]. 1871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Arrays of long/double are 64-bit aligned, so it's okay to use LDRD. 1873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* aget-wide vAA, vBB, vCC */ 1875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 1876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 1877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 1878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 1879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 1880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 1881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 1882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 1883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 1884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #3 @ r0<- arrayObj + index*width 1885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 1886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_AGET_WIDE_finish @ okay, continue below 1887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errArrayIndex @ index >= length, bail 1888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ May want to swap the order of these two branches depending on how the 1889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ branch prediction (if any) handles conditional forward branches vs. 1890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ unconditional forward branches. 1891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_OBJECT: /* 0x46 */ 1895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_OBJECT.S */ 1896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */ 1897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 1901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 1902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 1907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 1908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 1909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 1910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 1911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 1912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 1913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 1914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #2 @ r0<- arrayObj + index*width 1915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 1916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 1917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 1918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC] 1919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r9) @ vAA<- r2 1921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BOOLEAN: /* 0x47 */ 1928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_BOOLEAN.S */ 1929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */ 1930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 1934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 1935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 1940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 1941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 1942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 1943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 1944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 1945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 1946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 1947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #0 @ r0<- arrayObj + index*width 1948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 1949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 1950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 1951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC] 1952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r9) @ vAA<- r2 1954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BYTE: /* 0x48 */ 1961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_BYTE.S */ 1962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */ 1963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 1967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 1968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 1973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 1974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 1975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 1976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 1977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 1978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 1979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 1980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #0 @ r0<- arrayObj + index*width 1981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 1982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 1983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 1984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrsb r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC] 1985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 1986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r9) @ vAA<- r2 1987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 1988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_CHAR: /* 0x49 */ 1994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_CHAR.S */ 1995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */ 1996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #1 @ r0<- arrayObj + index*width 2014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrh r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC] 2018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r9) @ vAA<- r2 2020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_SHORT: /* 0x4a */ 2027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET_SHORT.S */ 2028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AGET.S */ 2029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #1 @ r0<- arrayObj + index*width 2047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrsh r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC] 2051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r9) @ vAA<- r2 2053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT: /* 0x4b */ 2060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */ 2061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA. 2063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-boolean, aput-byte, aput-char, aput-short 2068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #2 @ r0<- arrayObj + index*width 2079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r9) @ r2<- vAA 2083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2 2085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_WIDE: /* 0x4c */ 2091d7bf3656e8c57e630aec26aa29eeea3eb4ca99abAndy McFadden/* File: armv4t/OP_APUT_WIDE.S */ 2092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 64 bits. vBB[vCC] <- vAA. 2094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* aput-wide vAA, vBB, vCC */ 2096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 2097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 2099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 2100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #3 @ r0<- arrayObj + index*width 2106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 2108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_APUT_WIDE_finish @ okay, continue below 2109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errArrayIndex @ index >= length, bail 2110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ May want to swap the order of these two branches depending on how the 2111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ branch prediction (if any) handles conditional forward branches vs. 2112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ unconditional forward branches. 2113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_OBJECT: /* 0x4d */ 2117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_OBJECT.S */ 2118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Store an object into an array. vBB[vCC] <- vAA. 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 /* op vAA, vBB, vCC */ 2125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 2126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 2128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 2129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- vBB (array object) 2130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vCC (requested index) 2131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ null array object? 2132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r9) @ r9<- vAA 2133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r1, #offArrayObject_length] @ r3<- arrayObj->length 2135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r10, r1, r0, lsl #2 @ r10<- arrayObj + index*width 2136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, r3 @ compare unsigned index, length 2137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_APUT_OBJECT_finish @ we're okay, continue on 2138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errArrayIndex @ index >= length, bail 2139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BOOLEAN: /* 0x4e */ 2144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_BOOLEAN.S */ 2145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */ 2146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA. 2148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-boolean, aput-byte, aput-char, aput-short 2153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #0 @ r0<- arrayObj + index*width 2164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r9) @ r2<- vAA 2168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project strb r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2 2170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BYTE: /* 0x4f */ 2177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_BYTE.S */ 2178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */ 2179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA. 2181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-boolean, aput-byte, aput-char, aput-short 2186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #0 @ r0<- arrayObj + index*width 2197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r9) @ r2<- vAA 2201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project strb r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2 2203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_CHAR: /* 0x50 */ 2210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_CHAR.S */ 2211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */ 2212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA. 2214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-boolean, aput-byte, aput-char, aput-short 2219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #1 @ r0<- arrayObj + index*width 2230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r9) @ r2<- vAA 2234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project strh r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2 2236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_SHORT: /* 0x51 */ 2243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT_SHORT.S */ 2244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_APUT.S */ 2245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA. 2247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 2249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 2250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-boolean, aput-byte, aput-char, aput-short 2252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 2255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 2257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 2258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 2259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 2260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 2261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 2262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #1 @ r0<- arrayObj + index*width 2263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 2264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 2265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r9) @ r2<- vAA 2267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project strh r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2 2269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET: /* 0x52 */ 2276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */ 2277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_finish @ no, already resolved 2291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_finish 2297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE: /* 0x53 */ 2302d7bf3656e8c57e630aec26aa29eeea3eb4ca99abAndy McFadden/* File: armv4t/OP_IGET_WIDE.S */ 2303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Wide 32-bit instance field get. 2305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* iget-wide vA, vB, field@CCCC */ 2307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pResFields 2311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_WIDE_finish @ no, already resolved 2315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_WIDE_finish 2321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT: /* 0x54 */ 2326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_OBJECT.S */ 2327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */ 2328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_OBJECT_finish @ no, already resolved 2342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_OBJECT_finish 2348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BOOLEAN: /* 0x55 */ 2354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_BOOLEAN.S */ 2355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IGET.S" { "load":"ldrb", "sqnum":"1" } 2356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */ 2357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_BOOLEAN_finish @ no, already resolved 2371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_BOOLEAN_finish 2377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BYTE: /* 0x56 */ 2383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_BYTE.S */ 2384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IGET.S" { "load":"ldrsb", "sqnum":"2" } 2385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */ 2386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_BYTE_finish @ no, already resolved 2400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_BYTE_finish 2406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_CHAR: /* 0x57 */ 2412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_CHAR.S */ 2413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IGET.S" { "load":"ldrh", "sqnum":"3" } 2414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */ 2415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_CHAR_finish @ no, already resolved 2429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_CHAR_finish 2435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_SHORT: /* 0x58 */ 2441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_SHORT.S */ 2442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IGET.S" { "load":"ldrsh", "sqnum":"4" } 2443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET.S */ 2444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_SHORT_finish @ no, already resolved 2458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 2463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IGET_SHORT_finish 2464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT: /* 0x59 */ 2470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */ 2471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_finish @ no, already resolved 2485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_finish @ yes, finish up 2491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE: /* 0x5a */ 2496d7bf3656e8c57e630aec26aa29eeea3eb4ca99abAndy McFadden/* File: armv4t/OP_IPUT_WIDE.S */ 2497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* iput-wide vA, vB, field@CCCC */ 2498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pResFields 2502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_WIDE_finish @ no, already resolved 2506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_WIDE_finish @ yes, finish up 2512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT: /* 0x5b */ 2517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_OBJECT.S */ 2518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */ 2519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_OBJECT_finish @ no, already resolved 2533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_OBJECT_finish @ yes, finish up 2539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BOOLEAN: /* 0x5c */ 2545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_BOOLEAN.S */ 2546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IPUT.S" { "store":"strb", "sqnum":"1" } 2547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */ 2548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_BOOLEAN_finish @ no, already resolved 2562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_BOOLEAN_finish @ yes, finish up 2568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BYTE: /* 0x5d */ 2574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_BYTE.S */ 2575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IPUT.S" { "store":"strb", "sqnum":"2" } 2576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */ 2577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_BYTE_finish @ no, already resolved 2591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_BYTE_finish @ yes, finish up 2597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_CHAR: /* 0x5e */ 2603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_CHAR.S */ 2604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IPUT.S" { "store":"strh", "sqnum":"3" } 2605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */ 2606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_CHAR_finish @ no, already resolved 2620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_CHAR_finish @ yes, finish up 2626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_SHORT: /* 0x5f */ 2632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_SHORT.S */ 2633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/OP_IPUT.S" { "store":"strh", "sqnum":"4" } 2634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT.S */ 2635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 2642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- DvmDex 2643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref CCCC 2644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r3, #offDvmDex_pResFields] @ r2<- pDvmDex->pResFields 2645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r0) @ r9<- fp[B], the object pointer 2646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr 2647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_SHORT_finish @ no, already resolved 2649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project8: ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 2650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 2651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 2652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveInstField @ r0<- resolved InstField ptr 2653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 2654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_IPUT_SHORT_finish @ yes, finish up 2655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 2656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET: /* 0x60 */ 2661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */ 2662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_resolve @ yes, do resolve 2674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_finish: @ field ptr in r0 2675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offStaticField_value] @ r1<- field value 2676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r2) @ fp[AA]<- r1 2679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_WIDE: /* 0x61 */ 2685d7bf3656e8c57e630aec26aa29eeea3eb4ca99abAndy McFadden/* File: armv4t/OP_SGET_WIDE.S */ 2686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit SGET handler. 2688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* sget-wide vAA, field@BBBB */ 2690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_WIDE_resolve @ yes, do resolve 2696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_finish: 2697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- AA 2698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, #offStaticField_value 2699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r0, {r2-r3} @ r2/r3<- field value (aligned) 2700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[AA] 2701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r1, {r2-r3} @ vAA/vAA+1<- r2/r3 2703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_OBJECT: /* 0x62 */ 2709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_OBJECT.S */ 2710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */ 2711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_OBJECT_resolve @ yes, do resolve 2723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_finish: @ field ptr in r0 2724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offStaticField_value] @ r1<- field value 2725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r2) @ fp[AA]<- r1 2728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 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_SGET_BOOLEAN: /* 0x63 */ 2735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_BOOLEAN.S */ 2736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */ 2737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_BOOLEAN_resolve @ yes, do resolve 2749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_finish: @ field ptr in r0 2750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offStaticField_value] @ r1<- field value 2751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r2) @ fp[AA]<- r1 2754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BYTE: /* 0x64 */ 2761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_BYTE.S */ 2762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */ 2763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_BYTE_resolve @ yes, do resolve 2775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_finish: @ field ptr in r0 2776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offStaticField_value] @ r1<- field value 2777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r2) @ fp[AA]<- r1 2780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_CHAR: /* 0x65 */ 2787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_CHAR.S */ 2788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */ 2789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_CHAR_resolve @ yes, do resolve 2801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_finish: @ field ptr in r0 2802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offStaticField_value] @ r1<- field value 2803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r2) @ fp[AA]<- r1 2806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_SHORT: /* 0x66 */ 2813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET_SHORT.S */ 2814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SGET.S */ 2815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SGET_SHORT_resolve @ yes, do resolve 2827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_finish: @ field ptr in r0 2828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offStaticField_value] @ r1<- field value 2829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r2) @ fp[AA]<- r1 2832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT: /* 0x67 */ 2839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */ 2840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_resolve @ yes, do resolve 2852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_finish: @ field ptr in r0 2853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- fp[AA] 2856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offStaticField_value] @ field<- vAA 2858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_WIDE: /* 0x68 */ 2863d7bf3656e8c57e630aec26aa29eeea3eb4ca99abAndy McFadden/* File: armv4t/OP_SPUT_WIDE.S */ 2864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit SPUT handler. 2866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* sput-wide vAA, field@BBBB */ 2868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 2872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 2874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_WIDE_resolve @ yes, do resolve 2876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_WIDE_finish: @ field ptr in r0, AA in r9 2877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r2-r3} @ r2/r3<- vAA/vAA+1 2879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, #offStaticField_value 2881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r0, {r2-r3} @ field<- vAA/vAA+1 2882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_OBJECT: /* 0x69 */ 2887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_OBJECT.S */ 2888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */ 2889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_OBJECT_resolve @ yes, do resolve 2901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_OBJECT_finish: @ field ptr in r0 2902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- fp[AA] 2905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offStaticField_value] @ field<- vAA 2907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BOOLEAN: /* 0x6a */ 2913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_BOOLEAN.S */ 2914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */ 2915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_BOOLEAN_resolve @ yes, do resolve 2927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_finish: @ field ptr in r0 2928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- fp[AA] 2931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offStaticField_value] @ field<- vAA 2933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BYTE: /* 0x6b */ 2939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_BYTE.S */ 2940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */ 2941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_BYTE_resolve @ yes, do resolve 2953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_finish: @ field ptr in r0 2954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- fp[AA] 2957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offStaticField_value] @ field<- vAA 2959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_CHAR: /* 0x6c */ 2965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_CHAR.S */ 2966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */ 2967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 2974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 2975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 2976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 2977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 2978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_CHAR_resolve @ yes, do resolve 2979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_finish: @ field ptr in r0 2980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 2981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 2982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- fp[AA] 2983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 2984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offStaticField_value] @ field<- vAA 2985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 2986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_SHORT: /* 0x6d */ 2991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT_SHORT.S */ 2992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SPUT.S */ 2993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 3000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 3001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 3002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 3003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 3004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_SPUT_SHORT_resolve @ yes, do resolve 3005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_finish: @ field ptr in r0 3006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- AA 3007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 3008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r2) @ r1<- fp[AA] 3009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r0, #offStaticField_value] @ field<- vAA 3011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL: /* 0x6e */ 3017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL.S */ 3018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 3020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 3022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 3029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved baseMethod 3030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 3032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_VIRTUAL_continue @ yes, continue on 3036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 3037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 3038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_VIRTUAL @ resolver method type 3039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 3040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 3041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_VIRTUAL_continue @ no, continue 3042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 3043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER: /* 0x6f */ 3047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER.S */ 3048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 3050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 3052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 3056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 3059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r10) @ r2<- "this" ptr 3063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved baseMethod 3064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ null "this"? 3065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [rGLUE, #offGlue_method] @ r9<- current method 3066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null "this", throw exception 3067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [r9, #offMethod_clazz] @ r9<- method->clazz 3069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_SUPER_continue @ resolved, continue on 3071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_INVOKE_SUPER_resolve @ do resolve now 3072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT: /* 0x70 */ 3076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_DIRECT.S */ 3077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 3079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 3081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 3082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 3083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 3084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/range 3086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 3093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved methodToCall 3094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 3096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r10) @ r2<- "this" ptr 3100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_INVOKE_DIRECT_resolve @ not resolved, do it now 3101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_finish: 3102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ null "this" ref? 3103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_invokeMethodNoRange @ no, continue on 3104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errNullObject @ yes, throw exception 3105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC: /* 0x71 */ 3109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_STATIC.S */ 3110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 3112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 3114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved methodToCall 3121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_invokeMethodNoRange @ yes, continue on 3124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project0: ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 3125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 3126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_STATIC @ resolver method type 3127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 3128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 3129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_invokeMethodNoRange @ no, continue 3130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 3131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE: /* 0x72 */ 3136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_INTERFACE.S */ 3137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 3139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 3141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r2, 2) @ r2<- FEDC or CCCC 3145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- C (or stays CCCC) 3148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- first arg ("this") 3151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- methodClassDex 3152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null obj? 3153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- method 3154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, fail 3155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offObject_clazz] @ r0<- thisPtr->clazz 3156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmFindInterfaceMethodInCache @ r0<- call(class, ref, method, dex) 3157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 3158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 3159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_invokeMethodNoRange @ jump to common handler 3160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_73: /* 0x73 */ 3165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_73.S */ 3166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 3167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 3168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_RANGE: /* 0x74 */ 3174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL_RANGE.S */ 3175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL.S */ 3176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 3178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 3180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 3187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved baseMethod 3188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 3190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_VIRTUAL_RANGE_continue @ yes, continue on 3194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 3195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 3196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_VIRTUAL @ resolver method type 3197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 3198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 3199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_VIRTUAL_RANGE_continue @ no, continue 3200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 3201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_RANGE: /* 0x75 */ 3206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER_RANGE.S */ 3207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER.S */ 3208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 3210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 3212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 3216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 3219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r10) @ r2<- "this" ptr 3223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved baseMethod 3224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ null "this"? 3225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [rGLUE, #offGlue_method] @ r9<- current method 3226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null "this", throw exception 3227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [r9, #offMethod_clazz] @ r9<- method->clazz 3229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_SUPER_RANGE_continue @ resolved, continue on 3231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_INVOKE_SUPER_RANGE_resolve @ do resolve now 3232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_RANGE: /* 0x76 */ 3237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_DIRECT_RANGE.S */ 3238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_DIRECT.S */ 3239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 3241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 3243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 3244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 3245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 3246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/range 3248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 3255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved methodToCall 3256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 3258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ already resolved? 3260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r10) @ r2<- "this" ptr 3262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_INVOKE_DIRECT_RANGE_resolve @ not resolved, do it now 3263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_finish: 3264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ null "this" ref? 3265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_invokeMethodRange @ no, continue on 3266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errNullObject @ yes, throw exception 3267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC_RANGE: /* 0x77 */ 3272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_STATIC_RANGE.S */ 3273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_STATIC.S */ 3274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 3276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 3278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- pDvmDex 3282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offDvmDex_pResMethods] @ r3<- pDvmDex->pResMethods 3284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1, lsl #2] @ r0<- resolved methodToCall 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 bne common_invokeMethodRange @ yes, continue on 3288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project0: ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 3289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 3290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_STATIC @ resolver method type 3291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 3292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 3293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_invokeMethodRange @ no, continue 3294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 3295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE_RANGE: /* 0x78 */ 3301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_INTERFACE_RANGE.S */ 3302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_INTERFACE.S */ 3303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 3305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 3307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r2, 2) @ r2<- FEDC or CCCC 3311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 3312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- C (or stays CCCC) 3314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 3316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- first arg ("this") 3317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_methodClassDex] @ r3<- methodClassDex 3318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null obj? 3319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- method 3320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, fail 3321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offObject_clazz] @ r0<- thisPtr->clazz 3322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmFindInterfaceMethodInCache @ r0<- call(class, ref, method, dex) 3323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 3324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 3325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_invokeMethodRange @ jump to common handler 3326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_79: /* 0x79 */ 3332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_79.S */ 3333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 3334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 3335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_7A: /* 0x7a */ 3341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_7A.S */ 3342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 3343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 3344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_INT: /* 0x7b */ 3350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEG_INT.S */ 3351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 3352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 3355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 3358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 3359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r0, r0, #0 @ r0<- op, r0-r3 changed 3368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 3370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 3372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_INT: /* 0x7c */ 3377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NOT_INT.S */ 3378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 3379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 3382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 3385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 3386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r0, r0 @ r0<- op, r0-r3 changed 3395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 3397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 3399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_LONG: /* 0x7d */ 3404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEG_LONG.S */ 3405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */ 3406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit unary operation. Provide an "instr" line that 3408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0/r1". 3409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: neg-long, not-long, neg-double, long-to-double, double-to-long 3412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 3418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vAA 3420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsbs r0, r0, #0 @ optional op; may set condition codes 3422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsc r1, r1, #0 @ r0/r1<- op, r2-r3 changed 3423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA<- r0/r1 3425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-13 instructions */ 3427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_LONG: /* 0x7e */ 3433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NOT_LONG.S */ 3434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */ 3435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit unary operation. Provide an "instr" line that 3437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0/r1". 3438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: neg-long, not-long, neg-double, long-to-double, double-to-long 3441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 3447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vAA 3449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r0, r0 @ optional op; may set condition codes 3451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r1, r1 @ r0/r1<- op, r2-r3 changed 3452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA<- r0/r1 3454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-13 instructions */ 3456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_FLOAT: /* 0x7f */ 3462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEG_FLOAT.S */ 3463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 3464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 3467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 3470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 3471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, #0x80000000 @ r0<- op, r0-r3 changed 3480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 3482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 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_NEG_DOUBLE: /* 0x80 */ 3489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_NEG_DOUBLE.S */ 3490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */ 3491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit unary operation. Provide an "instr" line that 3493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0/r1". 3494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: neg-long, not-long, neg-double, long-to-double, double-to-long 3497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 3503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vAA 3505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, r1, #0x80000000 @ r0/r1<- op, r2-r3 changed 3508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA<- r0/r1 3510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-13 instructions */ 3512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_LONG: /* 0x81 */ 3518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_LONG.S */ 3519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWider.S */ 3520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32bit-to-64bit unary operation. Provide an "instr" line 3522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0", where 3523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 64-bit quantity in r0/r1. 3524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: int-to-long, int-to-double, float-to-long, float-to-double 3526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0, asr #31 @ r0<- op, r0-r3 changed 3536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vA/vA+1<- r0/r1 3538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 3540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_FLOAT: /* 0x82 */ 3545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_FLOAT.S */ 3546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 3547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 3550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 3553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 3554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_i2f @ r0<- op, r0-r3 changed 3563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 3565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 3567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_DOUBLE: /* 0x83 */ 3572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_DOUBLE.S */ 3573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWider.S */ 3574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32bit-to-64bit unary operation. Provide an "instr" line 3576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0", where 3577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 64-bit quantity in r0/r1. 3578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: int-to-long, int-to-double, float-to-long, float-to-double 3580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_i2d @ r0<- op, r0-r3 changed 3590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vA/vA+1<- r0/r1 3592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 3594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_INT: /* 0x84 */ 3599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_LONG_TO_INT.S */ 3600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* we ignore the high word, making this equivalent to a 32-bit reg move */ 3601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MOVE.S */ 3602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 3603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 3604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B from 15:12 3605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A from 11:8 3606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[B] 3608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 3609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 3610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r2, r0) @ fp[A]<- r2 3611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute next instruction 3612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_FLOAT: /* 0x85 */ 3618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_LONG_TO_FLOAT.S */ 3619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopNarrower.S */ 3620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64bit-to-32bit unary operation. Provide an "instr" line 3622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0/r1", where 3623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 32-bit quantity in r0. 3624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: long-to-float, double-to-int, double-to-float 3626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (This would work for long-to-int, but that instruction is actually 3628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an exact match for OP_MOVE.) 3629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 3634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vB/vB+1 3636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_l2f @ r0<- op, r0-r3 changed 3639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vA<- r0 3641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 3643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_DOUBLE: /* 0x86 */ 3648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_LONG_TO_DOUBLE.S */ 3649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */ 3650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit unary operation. Provide an "instr" line that 3652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0/r1". 3653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: neg-long, not-long, neg-double, long-to-double, double-to-long 3656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 3662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vAA 3664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_l2d @ r0/r1<- op, r2-r3 changed 3667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA<- r0/r1 3669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-13 instructions */ 3671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 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_FLOAT_TO_INT: /* 0x87 */ 3677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FLOAT_TO_INT.S */ 3678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI appears to have Java-style conversions of +inf/-inf/NaN */ 3679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 3680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 3683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 3686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 3687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_f2iz @ r0<- op, r0-r3 changed 3696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 3698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 3700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if 0 3703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/unop.S" {"instr":"bl f2i_doconv"} 3704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@break 3705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 3706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert the float in r0 to an int in r0. 3707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We have to clip values to int min/max per the specification. The 3709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected common case is a "reasonable" value that converts directly 3710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to modest integer. The EABI convert function isn't doing this for us. 3711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectf2i_doconv: 3713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r4, lr} 3714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0x4f000000 @ (float)maxint 3715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r4, r0 3716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpge @ is arg >= maxint? 3717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 3718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r0, #0x80000000 @ return maxint (7fffffff) 3719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmnefd sp!, {r4, pc} 3720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 3722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0xcf000000 @ (float)minint 3723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmple @ is arg <= minint? 3724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 3725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r0, #0x80000000 @ return minint (80000000) 3726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmnefd sp!, {r4, pc} 3727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 3729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r4 3730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpeq @ is arg == self? 3731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ zero == no 3732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmeqfd sp!, {r4, pc} @ return zero for NaN 3733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 3735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_f2iz @ convert float to int 3736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r4, pc} 3737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 3738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_LONG: /* 0x88 */ 3743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FLOAT_TO_LONG.S */ 3744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/unopWider.S" {"instr":"bl __aeabi_f2lz"} 3745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWider.S */ 3746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32bit-to-64bit unary operation. Provide an "instr" line 3748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0", where 3749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 64-bit quantity in r0/r1. 3750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: int-to-long, int-to-double, float-to-long, float-to-double 3752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl f2l_doconv @ r0<- op, r0-r3 changed 3762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vA/vA+1<- r0/r1 3764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 3766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_DOUBLE: /* 0x89 */ 3772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_FLOAT_TO_DOUBLE.S */ 3773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWider.S */ 3774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32bit-to-64bit unary operation. Provide an "instr" line 3776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0", where 3777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 64-bit quantity in r0/r1. 3778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: int-to-long, int-to-double, float-to-long, float-to-double 3780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_f2d @ r0<- op, r0-r3 changed 3790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vA/vA+1<- r0/r1 3792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 3794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_INT: /* 0x8a */ 3799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DOUBLE_TO_INT.S */ 3800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI appears to have Java-style conversions of +inf/-inf/NaN */ 3801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopNarrower.S */ 3802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64bit-to-32bit unary operation. Provide an "instr" line 3804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0/r1", where 3805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 32-bit quantity in r0. 3806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: long-to-float, double-to-int, double-to-float 3808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (This would work for long-to-int, but that instruction is actually 3810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an exact match for OP_MOVE.) 3811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 3816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vB/vB+1 3818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_d2iz @ r0<- op, r0-r3 changed 3821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vA<- r0 3823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 3825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if 0 3828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/unopNarrower.S" {"instr":"bl d2i_doconv"} 3829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@break 3830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 3831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert the double in r0/r1 to an int in r0. 3832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We have to clip values to int min/max per the specification. The 3834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected common case is a "reasonable" value that converts directly 3835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to modest integer. The EABI convert function isn't doing this for us. 3836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectd2i_doconv: 3838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r4, r5, lr} @ save regs 3839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, .LOP_DOUBLE_TO_INT_maxlo @ (double)maxint, lo 3840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, .LOP_DOUBLE_TO_INT_maxhi @ (double)maxint, hi 3841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub sp, sp, #4 @ align for EABI 3842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r4, r0 @ save r0 3843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r5, r1 @ and r1 3844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dcmpge @ is arg >= maxint? 3845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 3846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r0, #0x80000000 @ return maxint (7fffffff) 3847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f 3848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 3850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r5 3851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, .LOP_DOUBLE_TO_INT_min @ (double)minint, hi 3852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ (double)minint, lo 3853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dcmple @ is arg <= minint? 3854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 3855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r0, #0x80000000 @ return minint (80000000) 3856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f 3857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 3859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r5 3860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, r4 @ compare against self 3861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r5 3862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dcmpeq @ is arg == self? 3863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ zero == no 3864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq 1f @ return zero for NaN 3865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 3867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r5 3868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_d2iz @ convert double to int 3869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 3871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add sp, sp, #4 3872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r4, r5, pc} 3873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_maxlo: 3875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word 0xffc00000 @ maxint, as a double (low word) 3876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_maxhi: 3877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word 0x41dfffff @ maxint, as a double (high word) 3878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_min: 3879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word 0xc1e00000 @ minint, as a double (high word) 3880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 3881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_LONG: /* 0x8b */ 3886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DOUBLE_TO_LONG.S */ 3887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/unopWide.S" {"instr":"bl __aeabi_d2lz"} 3888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopWide.S */ 3889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit unary operation. Provide an "instr" line that 3891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0/r1". 3892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: neg-long, not-long, neg-double, long-to-double, double-to-long 3895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 3901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 3902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vAA 3903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl d2l_doconv @ r0/r1<- op, r2-r3 changed 3906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA<- r0/r1 3908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-13 instructions */ 3910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_FLOAT: /* 0x8c */ 3917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DOUBLE_TO_FLOAT.S */ 3918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unopNarrower.S */ 3919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64bit-to-32bit unary operation. Provide an "instr" line 3921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = op r0/r1", where 3922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "result" is a 32-bit quantity in r0. 3923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: long-to-float, double-to-int, double-to-float 3925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (This would work for long-to-int, but that instruction is actually 3927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an exact match for OP_MOVE.) 3928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[B] 3933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vB/vB+1 3935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 3937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_d2f @ r0<- op, r0-r3 changed 3938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vA<- r0 3940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-11 instructions */ 3942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_BYTE: /* 0x8d */ 3947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_BYTE.S */ 3948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 3949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 3952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 3955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 3956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl #24 @ optional op; may set condition codes 3963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asr #24 @ r0<- op, r0-r3 changed 3965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 3967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 3969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_CHAR: /* 0x8e */ 3974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_CHAR.S */ 3975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 3976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 3979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 3980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 3982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 3983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 3986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 3987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 3988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 3989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl #16 @ optional op; may set condition codes 3990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 3991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr #16 @ r0<- op, r0-r3 changed 3992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 3993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 3994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 3995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 3996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_SHORT: /* 0x8f */ 4001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INT_TO_SHORT.S */ 4002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unop.S */ 4003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 4005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op r0". 4006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. 4007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: neg-int, not-int, neg-float, int-to-float, float-to-int, 4009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * int-to-byte, int-to-char, int-to-short 4010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 4012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 4013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 4014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB 4015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 4016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl #16 @ optional op; may set condition codes 4017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 4018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asr #16 @ r0<- op, r0-r3 changed 4019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9-10 instructions */ 4023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT: /* 0x90 */ 4028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_INT.S */ 4029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1 @ r0<- op, r0-r3 changed 4060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT: /* 0x91 */ 4070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_INT.S */ 4071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r0, r0, r1 @ r0<- op, r0-r3 changed 4102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT: /* 0x92 */ 4112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_INT.S */ 4113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */ 4114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mul r0, r1, r0 @ r0<- op, r0-r3 changed 4145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT: /* 0x93 */ 4155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_INT.S */ 4156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 4180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idiv @ r0<- op, r0-r3 changed 4187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT: /* 0x94 */ 4197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_INT.S */ 4198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* idivmod returns quotient in r0 and remainder in r1 */ 4199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 4223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idivmod @ r1<- op, r0-r3 changed 4230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r9) @ vAA<- r1 4232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT: /* 0x95 */ 4240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_INT.S */ 4241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, r1 @ r0<- op, r0-r3 changed 4272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT: /* 0x96 */ 4282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_INT.S */ 4283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1 @ r0<- op, r0-r3 changed 4314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT: /* 0x97 */ 4324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_INT.S */ 4325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r0, r0, r1 @ r0<- op, r0-r3 changed 4356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT: /* 0x98 */ 4366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_INT.S */ 4367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 4397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl r1 @ r0<- op, r0-r3 changed 4398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT: /* 0x99 */ 4408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_INT.S */ 4409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 4439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asr r1 @ r0<- op, r0-r3 changed 4440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT: /* 0x9a */ 4450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_INT.S */ 4451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 4481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r1 @ r0<- op, r0-r3 changed 4482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG: /* 0x9b */ 4492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_LONG.S */ 4493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 4504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 4505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 4506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 4508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 4521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adds r0, r0, r2 @ optional op; may set condition codes 4526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adc r1, r1, r3 @ result<- op, r0-r3 changed 4527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 4529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 4531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG: /* 0x9c */ 4537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_LONG.S */ 4538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 4549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 4550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 4551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 4553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 4566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r0, r0, r2 @ optional op; may set condition codes 4571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbc r1, r1, r3 @ result<- op, r0-r3 changed 4572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 4574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 4576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG: /* 0x9d */ 4582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_LONG.S */ 4583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply. 4585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Consider WXxYZ (r1r0 x r3r2) with a long multiply: 4587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WX 4588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * x YZ 4589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * -------- 4590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ZW ZX 4591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * YW YX 4592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The low word of the result holds ZX, the high word holds 4594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (ZW+YX) + (the high overflow from ZX). YW doesn't matter because 4595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * it doesn't fit in the low 64 bits. 4596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlike most ARM math operations, multiply instructions have 4598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * restrictions on using the same register more than once (Rd and Rm 4599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * cannot be the same). 4600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long vAA, vBB, vCC */ 4602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mul ip, r2, r1 @ ip<- ZxW 4610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project umull r9, r10, r2, r0 @ r9/r10 <- ZxX 4611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mla r2, r0, r3, ip @ r2<- YxX + (ZxW) 4612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- AA 4613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r10, r2, r10 @ r10<- r10 + low(ZxW + (YxX)) 4614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, rFP, r0, lsl #2 @ r0<- &fp[AA] 4615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_MUL_LONG_finish 4617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG: /* 0x9e */ 4621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_LONG.S */ 4622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 4633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 4634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 4635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 4637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 4649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 4650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_ldivmod @ result<- op, r0-r3 changed 4656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 4658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 4660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG: /* 0x9f */ 4666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_LONG.S */ 4667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ldivmod returns quotient in r0/r1 and remainder in r2/r3 */ 4668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 4679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 4680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 4681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 4683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 4695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 4696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_ldivmod @ result<- op, r0-r3 changed 4702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r2,r3} @ vAA/vAA+1<- r2/r3 4704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 4706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG: /* 0xa0 */ 4712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_LONG.S */ 4713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 4724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 4725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 4726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 4728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 4741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, r2 @ optional op; may set condition codes 4746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, r3 @ result<- op, r0-r3 changed 4747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 4749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 4751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG: /* 0xa1 */ 4757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_LONG.S */ 4758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 4769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 4770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 4771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 4773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 4786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r2 @ optional op; may set condition codes 4791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r1, r3 @ result<- op, r0-r3 changed 4792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 4794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 4796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG: /* 0xa2 */ 4802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_LONG.S */ 4803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 4804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 4806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 4807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 4814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 4815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 4816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 4818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 4826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 4827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 4828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 4829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 4831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r0, r0, r2 @ optional op; may set condition codes 4836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r1, r1, r3 @ result<- op, r0-r3 changed 4837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 4839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 4841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG: /* 0xa3 */ 4847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_LONG.S */ 4848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. 4853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long vAA, vBB, vCC */ 4855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r3, r0, #255 @ r3<- BB 4858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr #8 @ r0<- CC 4859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[BB] 4860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vCC 4861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vBB/vBB+1 4862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #63 @ r2<- r2 & 0x3f 4863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, asl r2 @ r1<- r1 << r2 4866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r3, r2, #32 @ r3<- 32 - r2 4867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r1, r0, lsr r3 @ r1<- r1 | (r0 << (32-r2)) 4868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs ip, r2, #32 @ ip<- r2 - 32 4869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movpl r1, r0, asl ip @ if r2 >= 32, r1<- r0 << (r2-32) 4870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_SHL_LONG_finish 4872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG: /* 0xa4 */ 4876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_LONG.S */ 4877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. 4882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long vAA, vBB, vCC */ 4884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r3, r0, #255 @ r3<- BB 4887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr #8 @ r0<- CC 4888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[BB] 4889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vCC 4890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vBB/vBB+1 4891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #63 @ r0<- r0 & 0x3f 4892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r2 @ r0<- r2 >> r2 4895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r3, r2, #32 @ r3<- 32 - r2 4896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, asl r3 @ r0<- r0 | (r1 << (32-r2)) 4897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs ip, r2, #32 @ ip<- r2 - 32 4898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movpl r0, r1, asr ip @ if r2 >= 32, r0<-r1 >> (r2-32) 4899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_SHR_LONG_finish 4901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG: /* 0xa5 */ 4905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_LONG.S */ 4906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. 4911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ushr-long vAA, vBB, vCC */ 4913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r3, r0, #255 @ r3<- BB 4916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr #8 @ r0<- CC 4917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[BB] 4918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vCC 4919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vBB/vBB+1 4920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #63 @ r0<- r0 & 0x3f 4921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 4922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r2 @ r0<- r2 >> r2 4924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r3, r2, #32 @ r3<- 32 - r2 4925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, asl r3 @ r0<- r0 | (r1 << (32-r2)) 4926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs ip, r2, #32 @ ip<- r2 - 32 4927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movpl r0, r1, lsr ip @ if r2 >= 32, r0<-r1 >>> (r2-32) 4928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_USHR_LONG_finish 4930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT: /* 0xa6 */ 4934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_FLOAT.S */ 4935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 4958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 4959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 4960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 4961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 4962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 4964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 4965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fadd @ r0<- op, r0-r3 changed 4966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 4967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 4968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 4969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 4970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT: /* 0xa7 */ 4976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_FLOAT.S */ 4977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 4978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 4981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 4986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 4987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 4988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 4990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 4991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 4992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 4995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 4996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 4997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 4998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 4999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 5000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fsub @ r0<- op, r0-r3 changed 5008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 5012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT: /* 0xa8 */ 5018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_FLOAT.S */ 5019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 5020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 5022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 5023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 5028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 5029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 5030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 5032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 5033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 5034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 5041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 5042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fmul @ r0<- op, r0-r3 changed 5050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 5054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT: /* 0xa9 */ 5060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_FLOAT.S */ 5061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 5062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 5064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 5065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 5070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 5071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 5072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 5074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 5075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 5076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 5083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 5084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fdiv @ r0<- op, r0-r3 changed 5092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 5096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT: /* 0xaa */ 5102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_FLOAT.S */ 5103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI doesn't define a float remainder function, but libm does */ 5104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop.S */ 5105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 5107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0 op r1". 5108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. Note that we 5113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * *don't* check for (INT_MIN / -1) here, because the ARM math lib 5114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * handles it correctly. 5115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, 5117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, 5118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mul-float, div-float, rem-float 5119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC 5126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 5127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl fmodf @ r0<- op, r0-r3 changed 5135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 11-14 instructions */ 5139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE: /* 0xab */ 5145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_DOUBLE.S */ 5146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 5147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 5149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 5150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 5157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 5158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 5159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 5161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 5169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 5170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 5171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 5172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dadd @ result<- op, r0-r3 changed 5180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 5184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE: /* 0xac */ 5190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_DOUBLE.S */ 5191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 5192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 5194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 5195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 5202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 5203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 5204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 5206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 5214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 5215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 5216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 5217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dsub @ result<- op, r0-r3 changed 5225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 5229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE: /* 0xad */ 5235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_DOUBLE.S */ 5236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 5237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 5239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 5240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 5247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 5248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 5249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 5251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 5259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 5260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 5261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 5262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dmul @ result<- op, r0-r3 changed 5270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 5274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE: /* 0xae */ 5280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_DOUBLE.S */ 5281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 5282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 5284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 5285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 5292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 5293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 5294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 5296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 5304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 5305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 5306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 5307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_ddiv @ result<- op, r0-r3 changed 5315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 5319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE: /* 0xaf */ 5325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_DOUBLE.S */ 5326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI doesn't define a double remainder function, but libm does */ 5327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide.S */ 5328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. Provide an "instr" line that 5330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = r0-r1 op r2-r3". 5331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: add-long, sub-long, div-long, rem-long, and-long, or-long, 5338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-long, add-double, sub-double, mul-double, div-double, 5339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double 5340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPORTANT: you may specify "chkzero" or "preinstr" but not both. 5342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 5344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 5345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 5346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 5347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 5348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 5349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r2<- &fp[BB] 5350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[CC] 5351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1 5352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r2-r3} @ r2/r3<- vCC/vCC+1 5353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 5358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl fmod @ result<- op, r0-r3 changed 5361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 14-17 instructions */ 5365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_2ADDR: /* 0xb0 */ 5371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_INT_2ADDR.S */ 5372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1 @ r0<- op, r0-r3 changed 5401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT_2ADDR: /* 0xb1 */ 5411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_INT_2ADDR.S */ 5412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r0, r0, r1 @ r0<- op, r0-r3 changed 5441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_2ADDR: /* 0xb2 */ 5451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_INT_2ADDR.S */ 5452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */ 5453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mul r0, r1, r0 @ r0<- op, r0-r3 changed 5482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_2ADDR: /* 0xb3 */ 5492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_INT_2ADDR.S */ 5493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 5515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idiv @ r0<- op, r0-r3 changed 5522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_2ADDR: /* 0xb4 */ 5532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_INT_2ADDR.S */ 5533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* idivmod returns quotient in r0 and remainder in r1 */ 5534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 5556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idivmod @ r1<- op, r0-r3 changed 5563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r9) @ vAA<- r1 5565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_2ADDR: /* 0xb5 */ 5573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_INT_2ADDR.S */ 5574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, r1 @ r0<- op, r0-r3 changed 5603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_2ADDR: /* 0xb6 */ 5613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_INT_2ADDR.S */ 5614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1 @ r0<- op, r0-r3 changed 5643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_2ADDR: /* 0xb7 */ 5653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_INT_2ADDR.S */ 5654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r0, r0, r1 @ r0<- op, r0-r3 changed 5683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_2ADDR: /* 0xb8 */ 5693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_INT_2ADDR.S */ 5694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 5722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl r1 @ r0<- op, r0-r3 changed 5723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_2ADDR: /* 0xb9 */ 5733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_INT_2ADDR.S */ 5734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 5762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asr r1 @ r0<- op, r0-r3 changed 5763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_2ADDR: /* 0xba */ 5773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_INT_2ADDR.S */ 5774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 5775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 5777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 5778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 5785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 5786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 5787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 5788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 5792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 5794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 5795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 5797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 5802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r1 @ r0<- op, r0-r3 changed 5803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 5805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 5807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG_2ADDR: /* 0xbb */ 5813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_LONG_2ADDR.S */ 5814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 5815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 5817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 5818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 5825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 5826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 5827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 5828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 5832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 5834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 5835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 5836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 5837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adds r0, r0, r2 @ optional op; may set condition codes 5844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adc r1, r1, r3 @ result<- op, r0-r3 changed 5845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 5849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG_2ADDR: /* 0xbc */ 5855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_LONG_2ADDR.S */ 5856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 5857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 5859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 5860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 5867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 5868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 5869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 5870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 5874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 5876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 5877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 5878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 5879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 5880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r0, r0, r2 @ optional op; may set condition codes 5886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbc r1, r1, r3 @ result<- op, r0-r3 changed 5887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 5891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG_2ADDR: /* 0xbd */ 5897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_LONG_2ADDR.S */ 5898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply, "/2addr" version. 5900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See OP_MUL_LONG for an explanation. 5902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We get a little tight on registers, so to avoid looking up &fp[A] 5904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * again we stuff it into rINST. 5905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long/2addr vA, vB */ 5907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 5909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 5911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add rINST, rFP, r9, lsl #2 @ rINST<- &fp[A] 5912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 5913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia rINST, {r0-r1} @ r0/r1<- vAA/vAA+1 5914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mul ip, r2, r1 @ ip<- ZxW 5915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project umull r9, r10, r2, r0 @ r9/r10 <- ZxX 5916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mla r2, r0, r3, ip @ r2<- YxX + (ZxW) 5917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST @ r0<- &fp[A] (free up rINST) 5918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r10, r2, r10 @ r10<- r10 + low(ZxW + (YxX)) 5920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r0, {r9-r10} @ vAA/vAA+1<- r9/r10 5922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG_2ADDR: /* 0xbe */ 5928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_LONG_2ADDR.S */ 5929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 5930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 5932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 5933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 5940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 5941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 5942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 5943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 5947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 5949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 5950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 5951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 5952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 5953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 5957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 5959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_ldivmod @ result<- op, r0-r3 changed 5960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 5961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 5962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 5963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 5964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG_2ADDR: /* 0xbf */ 5970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_LONG_2ADDR.S */ 5971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ldivmod returns quotient in r0/r1 and remainder in r2/r3 */ 5972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 5973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 5975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 5976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 5977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 5980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 5981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 5983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 5984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 5985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 5986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 5989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 5990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 5991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 5992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 5993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 5994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 5995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 5996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 5997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 5998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 5999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_ldivmod @ result<- op, r0-r3 changed 6003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r2,r3} @ vAA/vAA+1<- r2/r3 6005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG_2ADDR: /* 0xc0 */ 6013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_LONG_2ADDR.S */ 6014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, r2 @ optional op; may set condition codes 6044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, r3 @ result<- op, r0-r3 changed 6045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG_2ADDR: /* 0xc1 */ 6055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_LONG_2ADDR.S */ 6056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r2 @ optional op; may set condition codes 6086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r1, r3 @ result<- op, r0-r3 changed 6087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG_2ADDR: /* 0xc2 */ 6097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_LONG_2ADDR.S */ 6098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r0, r0, r2 @ optional op; may set condition codes 6128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r1, r1, r3 @ result<- op, r0-r3 changed 6129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG_2ADDR: /* 0xc3 */ 6139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_LONG_2ADDR.S */ 6140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 6142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 6143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 6145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r3) @ r2<- vB 6149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #63 @ r2<- r2 & 0x3f 6151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, asl r2 @ r1<- r1 << r2 6154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r3, r2, #32 @ r3<- 32 - r2 6155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r1, r1, r0, lsr r3 @ r1<- r1 | (r0 << (32-r2)) 6156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs ip, r2, #32 @ ip<- r2 - 32 6157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movpl r1, r0, asl ip @ if r2 >= 32, r1<- r0 << (r2-32) 6159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl r2 @ r0<- r0 << r2 6160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_SHL_LONG_2ADDR_finish 6161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG_2ADDR: /* 0xc4 */ 6165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_LONG_2ADDR.S */ 6166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 6168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 6169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long/2addr vA, vB */ 6171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r3) @ r2<- vB 6175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #63 @ r2<- r2 & 0x3f 6177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r2 @ r0<- r2 >> r2 6180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r3, r2, #32 @ r3<- 32 - r2 6181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, asl r3 @ r0<- r0 | (r1 << (32-r2)) 6182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs ip, r2, #32 @ ip<- r2 - 32 6183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movpl r0, r1, asr ip @ if r2 >= 32, r0<-r1 >> (r2-32) 6185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, asr r2 @ r1<- r1 >> r2 6186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_SHR_LONG_2ADDR_finish 6187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG_2ADDR: /* 0xc5 */ 6191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_LONG_2ADDR.S */ 6192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 6194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 6195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ushr-long/2addr vA, vB */ 6197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r3) @ r2<- vB 6201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #63 @ r2<- r2 & 0x3f 6203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r2 @ r0<- r2 >> r2 6206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r3, r2, #32 @ r3<- 32 - r2 6207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, asl r3 @ r0<- r0 | (r1 << (32-r2)) 6208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs ip, r2, #32 @ ip<- r2 - 32 6209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movpl r0, r1, lsr ip @ if r2 >= 32, r0<-r1 >>> (r2-32) 6211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, lsr r2 @ r1<- r1 >>> r2 6212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_USHR_LONG_2ADDR_finish 6213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT_2ADDR: /* 0xc6 */ 6217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_FLOAT_2ADDR.S */ 6218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 6219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 6221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 6229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 6230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 6231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 6232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 6238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 6239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fadd @ r0<- op, r0-r3 changed 6247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT_2ADDR: /* 0xc7 */ 6257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_FLOAT_2ADDR.S */ 6258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 6259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 6261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 6269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 6270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 6271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 6272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 6278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 6279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fsub @ r0<- op, r0-r3 changed 6287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT_2ADDR: /* 0xc8 */ 6297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_FLOAT_2ADDR.S */ 6298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 6299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 6301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 6309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 6310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 6311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 6312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 6318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 6319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fmul @ r0<- op, r0-r3 changed 6327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT_2ADDR: /* 0xc9 */ 6337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_FLOAT_2ADDR.S */ 6338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 6339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 6341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 6349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 6350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 6351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 6352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 6358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 6359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fdiv @ r0<- op, r0-r3 changed 6367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT_2ADDR: /* 0xca */ 6377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_FLOAT_2ADDR.S */ 6378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI doesn't define a float remainder function, but libm does */ 6379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binop2addr.S */ 6380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 6382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 6390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 6391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 6392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 6393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 6397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r9) @ r0<- vA 6399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vB 6400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl fmodf @ r0<- op, r0-r3 changed 6408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE_2ADDR: /* 0xcb */ 6418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_DOUBLE_2ADDR.S */ 6419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dadd @ result<- op, r0-r3 changed 6450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE_2ADDR: /* 0xcc */ 6460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SUB_DOUBLE_2ADDR.S */ 6461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dsub @ result<- op, r0-r3 changed 6492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE_2ADDR: /* 0xcd */ 6502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_DOUBLE_2ADDR.S */ 6503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dmul @ result<- op, r0-r3 changed 6534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE_2ADDR: /* 0xce */ 6544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_DOUBLE_2ADDR.S */ 6545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_ddiv @ result<- op, r0-r3 changed 6576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE_2ADDR: /* 0xcf */ 6586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_DOUBLE_2ADDR.S */ 6587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI doesn't define a double remainder function, but libm does */ 6588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopWide2addr.S */ 6589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit "/2addr" binary operation. Provide an "instr" line 6591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0-r1 op r2-r3". 6592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-long/2addr, sub-long/2addr, div-long/2addr, rem-long/2addr, 6599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-long/2addr, or-long/2addr, xor-long/2addr, add-double/2addr, 6600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-double/2addr, mul-double/2addr, div-double/2addr, 6601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-double/2addr 6602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 6604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 6606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rFP, r1, lsl #2 @ r1<- &fp[B] 6608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[A] 6609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r1, {r2-r3} @ r2/r3<- vBB/vBB+1 6610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 6611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs ip, r2, r3 @ second arg (r2-r3) is zero? 6613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 6616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl fmod @ result<- op, r0-r3 changed 6619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1 6621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 12-15 instructions */ 6623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT16: /* 0xd0 */ 6629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_INT_LIT16.S */ 6630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 6631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 6633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 6641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 6642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 6644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 6645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 6646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 6648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 6654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1 @ r0<- op, r0-r3 changed 6656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT: /* 0xd1 */ 6666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RSUB_INT.S */ 6667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* this op is "rsub-int", but can be thought of as "rsub-int/lit16" */ 6668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 6669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 6671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 6679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 6680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 6682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 6683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 6684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 6686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 6692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r0, r0, r1 @ r0<- op, r0-r3 changed 6694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT16: /* 0xd2 */ 6704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_INT_LIT16.S */ 6705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */ 6706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 6707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 6709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 6717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 6718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 6720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 6721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 6722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 6724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 6730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mul r0, r1, r0 @ r0<- op, r0-r3 changed 6732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT16: /* 0xd3 */ 6742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_INT_LIT16.S */ 6743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 6744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 6746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 6754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 6755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 6757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 6758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 6759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 6761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 6763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 6767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idiv @ r0<- op, r0-r3 changed 6769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT16: /* 0xd4 */ 6779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_INT_LIT16.S */ 6780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* idivmod returns quotient in r0 and remainder in r1 */ 6781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 6782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 6784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 6792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 6793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 6795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 6796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 6797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 6799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 6801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 6805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idivmod @ r1<- op, r0-r3 changed 6807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r9) @ vAA<- r1 6809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 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_AND_INT_LIT16: /* 0xd5 */ 6817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_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 and 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_OR_INT_LIT16: /* 0xd6 */ 6854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_INT_LIT16.S */ 6855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 6856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 6858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 6866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 6867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 6869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 6870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 6871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 6873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 6879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1 @ r0<- op, r0-r3 changed 6881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT16: /* 0xd7 */ 6891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_INT_LIT16.S */ 6892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit16.S */ 6893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 6895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16, 6903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16 6904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 6906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r1, 1) @ r1<- ssssCCCC (sign-extended) 6907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 6908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- A+ 6909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vB 6910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r9, r9, #15 6911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is second operand zero? 6913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 6916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r0, r0, r1 @ r0<- op, r0-r3 changed 6918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-13 instructions */ 6922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT8: /* 0xd8 */ 6928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_ADD_INT_LIT8.S */ 6929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 6930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 6932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 6940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 6941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 6942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 6944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 6945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 6946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 6947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 6948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 6949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 6951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 6952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 6954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 6956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1 @ 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-12 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_RSUB_INT_LIT8: /* 0xd9 */ 6967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_RSUB_INT_LIT8.S */ 6968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 6969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 6971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 6972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 6973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 6974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 6976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 6977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 6979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 6980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 6981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 6983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 6984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 6985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 6986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 6987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 6988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 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 @ optional op; may set condition codes 6995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r0, r0, r1 @ r0<- op, r0-r3 changed 6996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 6997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 6998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 6999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT8: /* 0xda */ 7006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_MUL_INT_LIT8.S */ 7007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */ 7008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mul r0, r1, r0 @ r0<- op, r0-r3 changed 7036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT8: /* 0xdb */ 7046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_DIV_INT_LIT8.S */ 7047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 7068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idiv @ r0<- op, r0-r3 changed 7075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT8: /* 0xdc */ 7085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_REM_INT_LIT8.S */ 7086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* idivmod returns quotient in r0 and remainder in r1 */ 7087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 7108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_idivmod @ r1<- op, r0-r3 changed 7115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r9) @ vAA<- r1 7117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT8: /* 0xdd */ 7125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_AND_INT_LIT8.S */ 7126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, r1 @ r0<- op, r0-r3 changed 7154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT8: /* 0xde */ 7164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_OR_INT_LIT8.S */ 7165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1 @ r0<- op, r0-r3 changed 7193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT8: /* 0xdf */ 7203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_XOR_INT_LIT8.S */ 7204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ optional op; may set condition codes 7231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eor r0, r0, r1 @ r0<- op, r0-r3 changed 7232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_LIT8: /* 0xe0 */ 7242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHL_INT_LIT8.S */ 7243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 7270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl r1 @ r0<- op, r0-r3 changed 7271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_LIT8: /* 0xe1 */ 7281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_SHR_INT_LIT8.S */ 7282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 7309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asr r1 @ r0<- op, r0-r3 changed 7310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_LIT8: /* 0xe2 */ 7320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_USHR_INT_LIT8.S */ 7321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/binopLit8.S */ 7322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 7324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 7325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 7326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 7327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 7329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 7330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8, 7332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8, 7333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 7334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 7336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_S(r3, 1) @ r3<- ssssCCBB (sign-extended for CC) 7337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 7338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r3, #255 @ r2<- BB 7339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB 7340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r1, r3, asr #8 @ r1<- ssssssCC (sign extended) 7341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @cmp r1, #0 @ is second operand zero? 7343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errDivideByZero 7344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #31 @ optional op; may set condition codes 7348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r1 @ r0<- op, r0-r3 changed 7349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 10-12 instructions */ 7353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E3: /* 0xe3 */ 7359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E3.S */ 7360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E4: /* 0xe4 */ 7368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E4.S */ 7369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E5: /* 0xe5 */ 7377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E5.S */ 7378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E6: /* 0xe6 */ 7386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E6.S */ 7387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E7: /* 0xe7 */ 7395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E7.S */ 7396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E8: /* 0xe8 */ 7404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E8.S */ 7405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E9: /* 0xe9 */ 7413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_E9.S */ 7414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_EA: /* 0xea */ 7422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_EA.S */ 7423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_EB: /* 0xeb */ 7431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_EB.S */ 7432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_EC: /* 0xec */ 7440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_EC.S */ 7441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 74483a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden.L_OP_THROW_VERIFICATION_ERROR: /* 0xed */ 74493a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden/* File: armv5te/OP_THROW_VERIFICATION_ERROR.S */ 74503a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden /* 74513a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden * Handle a throw-verification-error instruction. This throws an 74523a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden * exception for an error discovered during verification. The 74533a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden * exception is indicated by AA, with some detail provided by BBBB. 74543a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden */ 74553a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden /* op AA, ref@BBBB */ 74563a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr r0, [rGLUE, #offGlue_methodClassDex] @ r0<- glue->methodClassDex 74573a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden FETCH(r2, 1) @ r2<- BBBB 74583a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden mov r1, rINST, lsr #8 @ r1<- AA 74593a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden bl dvmThrowVerificationError @ always throws 74603a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden b common_exceptionThrown @ handle exception 7461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_EXECUTE_INLINE: /* 0xee */ 7466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_EXECUTE_INLINE.S */ 7467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Execute a "native inline" instruction. 7469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We need to call: 7471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * dvmPerformInlineOp4Std(arg0, arg1, arg2, arg3, &retval, ref) 7472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The first four args are in r0-r3, but the last two must be pushed 7474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * onto the stack. 7475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* [opt] execute-inline vAA, {vC, vD, vE, vF}, inline@BBBB */ 7477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 1) @ r10<- BBBB 7478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rGLUE, #offGlue_retval @ r1<- &glue->retval 7479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ can throw 7480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub sp, sp, #8 @ make room for arg(s) 7481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #12 @ r0<- B 7482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [sp] @ push &glue->retval 7483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl .LOP_EXECUTE_INLINE_continue @ make call; will return after 7484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add sp, sp, #8 @ pop stack 7485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ test boolean result of inline 7486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ returned false, handle exception 7487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 7488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_EF: /* 0xef */ 7494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_EF.S */ 7495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_EMPTY: /* 0xf0 */ 7503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_DIRECT_EMPTY.S */ 7504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * invoke-direct-empty is a no-op in a "standard" interpreter. 7506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance to next instr, load rINST 7508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 7509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute it 7510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_F1: /* 0xf1 */ 7514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_F1.S */ 7515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_QUICK: /* 0xf2 */ 7523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_QUICK.S */ 7524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-quick */ 7525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 7526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 7527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- object we're operating on 7528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field byte offset 7529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ check object for null 7530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A(+) 7531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 7532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1] @ r0<- obj.field (always 32 bits) 7533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 7535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 7537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE_QUICK: /* 0xf3 */ 7543d7bf3656e8c57e630aec26aa29eeea3eb4ca99abAndy McFadden/* File: armv4t/OP_IGET_WIDE_QUICK.S */ 7544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* iget-wide-quick vA, vB, offset@CCCC */ 7545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 7546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- object we're operating on 7547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field byte offset 7548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ check object for null 7549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A(+) 7550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 7551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, r3, r1 @ r9<- object + offset 7552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- obj.field (64 bits, aligned) 7553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 7554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r2, lsl #2 @ r3<- &fp[A] 7556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r3, {r0-r1} @ fp[A]<- r0/r1 7558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT_QUICK: /* 0xf4 */ 7564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_OBJECT_QUICK.S */ 7565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IGET_QUICK.S */ 7566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-quick */ 7567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 7568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 7569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- object we're operating on 7570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field byte offset 7571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ check object for null 7572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A(+) 7573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 7574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r1] @ r0<- obj.field (always 32 bits) 7575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 7577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 7579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_QUICK: /* 0xf5 */ 7586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_QUICK.S */ 7587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iput-quick, iput-object-quick */ 7588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 7589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 7590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- fp[B], the object pointer 7591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field byte offset 7592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ check object for null 7593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A(+) 7594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 7595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 7596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- fp[A] 7597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r3, r1] @ obj.field (always 32 bits)<- r0 7599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE_QUICK: /* 0xf6 */ 7606d7bf3656e8c57e630aec26aa29eeea3eb4ca99abAndy McFadden/* File: armv4t/OP_IPUT_WIDE_QUICK.S */ 7607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* iput-wide-quick vA, vB, offset@CCCC */ 7608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rINST, lsr #8 @ r0<- A(+) 7609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #12 @ r1<- B 7610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r0, r0, #15 7611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r1) @ r2<- fp[B], the object pointer 7612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r0, lsl #2 @ r3<- &fp[A] 7613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ check object for null 7614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- fp[A] 7615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 7616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 1) @ r3<- field byte offset 7617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, r2, r3 @ r2<- object + byte offset 7619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r2, {r0-r1} @ obj.field (64 bits, aligned)<- r0/r1 7620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT_QUICK: /* 0xf7 */ 7627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_OBJECT_QUICK.S */ 7628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_IPUT_QUICK.S */ 7629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iput-quick, iput-object-quick */ 7630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 7631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #12 @ r2<- B 7632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- fp[B], the object pointer 7633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field byte offset 7634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ check object for null 7635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A(+) 7636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 7637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 7638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- fp[A] 7639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r3, r1] @ obj.field (always 32 bits)<- r0 7641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK: /* 0xf8 */ 7649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL_QUICK.S */ 7650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 7652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 7654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 7656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 7657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 2) @ r3<- FEDC or CCCC 7658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 7659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 7660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r3, r3, #15 @ r3<- C (or stays CCCC) 7661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r3) @ r2<- vC ("this" ptr) 7663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ is "this" null? 7664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null "this", throw exception 7665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offObject_clazz] @ r2<- thisPtr->clazz 7666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_vtable] @ r2<- thisPtr->clazz->vtable 7667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ invoke must export 7668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r3<- vtable[BBBB] 7669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodNoRange @ continue on 7670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK_RANGE: /* 0xf9 */ 7674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL_QUICK_RANGE.S */ 7675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_VIRTUAL_QUICK.S */ 7676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 7678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 7680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 7682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 7683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r3, 2) @ r3<- FEDC or CCCC 7684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 7685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 7686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r3, r3, #15 @ r3<- C (or stays CCCC) 7687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r3) @ r2<- vC ("this" ptr) 7689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ is "this" null? 7690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null "this", throw exception 7691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offObject_clazz] @ r2<- thisPtr->clazz 7692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_vtable] @ r2<- thisPtr->clazz->vtable 7693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ invoke must export 7694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r3<- vtable[BBBB] 7695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodRange @ continue on 7696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK: /* 0xfa */ 7701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER_QUICK.S */ 7702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 7704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 7706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 7708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 7709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 7710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 7711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 7712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 7713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 7715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offMethod_clazz] @ r2<- method->clazz 7716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 7717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_super] @ r2<- method->clazz->super 7718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r10) @ r3<- "this" 7719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_vtable] @ r2<- ...clazz->super->vtable 7720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ null "this" ref? 7721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- super->vtable[BBBB] 7722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ "this" is null, throw exception 7723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodNoRange @ continue on 7724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK_RANGE: /* 0xfb */ 7729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER_QUICK_RANGE.S */ 7730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_INVOKE_SUPER_QUICK.S */ 7731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 7733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 7735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 7737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 7738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r10, 2) @ r10<- GFED or CCCC 7739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 7740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 7741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r10, r10, #15 @ r10<- D (or stays CCCC) 7742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- BBBB 7744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offMethod_clazz] @ r2<- method->clazz 7745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 7746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_super] @ r2<- method->clazz->super 7747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r10) @ r3<- "this" 7748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_vtable] @ r2<- ...clazz->super->vtable 7749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ null "this" ref? 7750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- super->vtable[BBBB] 7751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ "this" is null, throw exception 7752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodRange @ continue on 7753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FC: /* 0xfc */ 7759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_FC.S */ 7760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FD: /* 0xfd */ 7768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_FD.S */ 7769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FE: /* 0xfe */ 7777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_FE.S */ 7778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 7784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FF: /* 0xff */ 7786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/OP_UNUSED_FF.S */ 7787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/unused.S */ 7788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort 7789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 7794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size dvmAsmInstructionStart, .-dvmAsmInstructionStart 7795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmInstructionEnd 7796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionEnd: 7797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 7799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 7800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sister implementations 7801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 7802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmSisterStart 7804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmAsmSisterStart, %function 7805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 7806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 4 7807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterStart: 7808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_STRING */ 7810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the String has not yet been resolved. 7813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB (String ref) 7814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9: target register 7815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_STRING_resolve: 7817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method 7819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offMethod_clazz] @ r0<- method->clazz 7820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveString @ r0<- String reference 7821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 7822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yup, handle the exception 7823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_STRING_JUMBO */ 7830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the String has not yet been resolved. 7833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBBBBBB (String ref) 7834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9: target register 7835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_STRING_JUMBO_resolve: 7837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method 7839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offMethod_clazz] @ r0<- method->clazz 7840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveString @ r0<- String reference 7841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 7842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yup, handle the exception 7843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 7844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_CLASS */ 7850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the Class has not yet been resolved. 7853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB (Class ref) 7854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9: target register 7855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_CLASS_resolve: 7857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method 7859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #1 @ r2<- true 7860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offMethod_clazz] @ r0<- method->clazz 7861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- Class reference 7862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 7863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yup, handle the exception 7864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vAA<- r0 7867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CHECK_CAST */ 7871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 7874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds obj->clazz 7875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 holds class resolved from BBBB 7876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 7877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_fullcheck: 7879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmInstanceofNonTrivial @ r0<- boolean result 7880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 7881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_CHECK_CAST_okay @ no, success 7882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ A cast has failed. We need to throw a ClassCastException with the 7884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ class of the object that failed to be cast. 7885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ about to throw 7886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r9, #offObject_clazz] @ r3<- obj->clazz 7887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, .LstrClassCastExceptionPtr 7888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r3, #offClassObject_descriptor] @ r1<- obj->clazz->descriptor 7889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowExceptionWithClassMessage 7890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 7891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 7894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r2 holds BBBB 7896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 7897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolve: 7899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 7900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 7901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r2 @ r1<- BBBB 7902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ r2<- false 7903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 7904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- resolved ClassObject ptr 7905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 7906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 7907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0 @ r1<- class resolved from BBB 7908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, #offObject_clazz] @ r0<- obj->clazz 7909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_CHECK_CAST_resolved @ pick up where we left off 7910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrClassCastExceptionPtr: 7912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrClassCastException 7913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INSTANCE_OF */ 7916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 7919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds obj->clazz 7920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 holds class resolved from BBBB 7921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds A 7922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_fullcheck: 7924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmInstanceofNonTrivial @ r0<- boolean result 7925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ fall through to OP_INSTANCE_OF_store 7926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds boolean result 7929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds A 7930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_store: 7932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vA<- r0 7934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test succeeded, save and bail. 7939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds A 7940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_trivial: 7942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, #1 @ indicate success 7943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ could b OP_INSTANCE_OF_store, but copying is faster and cheaper 7944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r9) @ vA<- r0 7946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 7951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r3 holds BBBB 7953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds A 7954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolve: 7956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw 7957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method 7958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r3 @ r1<- BBBB 7959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #1 @ r2<- true 7960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offMethod_clazz] @ r0<- method->clazz 7961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- resolved ClassObject ptr 7962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 7963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 7964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0 @ r1<- class resolved from BBB 7965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #12 @ r3<- B 7966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r3) @ r0<- vB (object) 7967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r0, #offObject_clazz] @ r0<- obj->clazz 7968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_INSTANCE_OF_resolved @ pick up where we left off 7969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_NEW_INSTANCE */ 7972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 32 @ minimize cache lines 7974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_finish: @ r0=class 7975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmAllocObject @ r0<- new object 7976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 7977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 7978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle the exception 7979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 7980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 7981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r3) @ vAA<- r0 7982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 7983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class initialization required. 7986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 7987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds class object 7988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_needinit: 7990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r0 @ save r0 7991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmInitClass @ initialize class 7992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ check boolean result 7993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ restore r0 7994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_NEW_INSTANCE_initialized @ success, continue 7995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ failed, deal with init exception 7996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 7999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 holds BBBB 8001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolve: 8003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 8004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ r2<- false 8005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 8006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- resolved ClassObject ptr 8007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 8008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_NEW_INSTANCE_resolved @ no, continue 8009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 8010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We can't instantiate an abstract class or interface, so throw an 8013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * InstantiationError with the class descriptor as the message. 8014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds class object 8016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_abstract: 8018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offClassObject_descriptor] 8019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, .LstrInstantiationErrorPtr 8020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowExceptionWithClassMessage 8021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 8022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInstantiationErrorPtr: 8024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrInstantiationError 8025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_NEW_ARRAY */ 8028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolve class. (This is an uncommon case.) 8032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 holds array length 8034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r2 holds class ref CCCC 8035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_ARRAY_resolve: 8037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 8038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r1 @ r9<- length (save) 8039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r2 @ r1<- CCCC 8040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ r2<- false 8041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 8042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveClass @ r0<- call(clazz, ref) 8043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 8044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r9 @ r1<- length (restore) 8045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle exception 8046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ fall through to OP_NEW_ARRAY_finish 8047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Finish allocation. 8050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds class 8052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 holds array length 8053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_ARRAY_finish: 8055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #ALLOC_DONT_TRACK @ don't track in local refs table 8056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmAllocArrayByClass @ r0<- call(clazz, length, flags) 8057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ failed? 8058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ yes, handle the exception 8060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ vA<- r0 8064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY */ 8068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds array class 8072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 holds AA or BA 8073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_continue: 8075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offClassObject_descriptor] @ r3<- arrayClass->descriptor 8076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #ALLOC_DONT_TRACK @ r2<- alloc flags 8077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r3, [r3, #1] @ r3<- descriptor[1] 8078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- AA (length) 8080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10, lsr #4 @ r1<- B (length) 8082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #'I' @ array of ints? 8084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpne r3, #'L' @ array of objects? 8085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpne r3, #'[' @ array of arrays? 8086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r1 @ save length in r9 8087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_FILLED_NEW_ARRAY_notimpl @ no, not handled yet 8088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmAllocArrayByClass @ r0<- call(arClass, length, flags) 8089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null return? 8090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ alloc failed, handle exception 8091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- FEDC or CCCC 8093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [rGLUE, #offGlue_retval] @ retval.l <- new array 8094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, #offArrayObject_contents @ r0<- newArray->contents 8095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r9, r9, #1 @ length--, check for neg 8096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance to next instr, load rINST 8097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi 2f @ was zero, bail 8098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ copy values from registers into the array 8100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ r0=array, r1=CCCC/FEDC, r9=length (from AA or B), r10=AA/BA 8101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r1, lsl #2 @ r2<- &fp[CCCC] 8103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: ldr r3, [r2], #4 @ r3<- *r2++ 8104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r9, r9, #1 @ count-- 8105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r0], #4 @ *contents++ = vX 8106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bpl 1b 8107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ continue at 2 8108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #4 @ length was initially 5? 8110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r10, #15 @ r2<- A 8111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f @ <= 4 args, branch 8112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- vA 8113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r9, r9, #1 @ count-- 8114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r0, #16] @ contents[4] = vA 8115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: and r2, r1, #15 @ r2<- F/E/D/C 8116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- vF/vE/vD/vC 8117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, lsr #4 @ r1<- next reg in low 4 8118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r9, r9, #1 @ count-- 8119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r0], #4 @ *contents++ = vX 8120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bpl 1b 8121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ continue at 2 8122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 8125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 8126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute it 8127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception indicating that we have not implemented this 8130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mode of filled-new-array. 8131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_notimpl: 8133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, .L_strInternalError 8134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, .L_strFilledNewArrayNotImpl 8135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 8136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 8137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) @ define in one or the other, not both 8139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_strFilledNewArrayNotImpl: 8140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrFilledNewArrayNotImpl 8141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_strInternalError: 8142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrInternalError 8143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY_RANGE */ 8147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds array class 8151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 holds AA or BA 8152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_continue: 8154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offClassObject_descriptor] @ r3<- arrayClass->descriptor 8155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #ALLOC_DONT_TRACK @ r2<- alloc flags 8156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r3, [r3, #1] @ r3<- descriptor[1] 8157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- AA (length) 8159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10, lsr #4 @ r1<- B (length) 8161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #'I' @ array of ints? 8163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpne r3, #'L' @ array of objects? 8164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpne r3, #'[' @ array of arrays? 8165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r1 @ save length in r9 8166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_FILLED_NEW_ARRAY_RANGE_notimpl @ no, not handled yet 8167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmAllocArrayByClass @ r0<- call(arClass, length, flags) 8168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null return? 8169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_exceptionThrown @ alloc failed, handle exception 8170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- FEDC or CCCC 8172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [rGLUE, #offGlue_retval] @ retval.l <- new array 8173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, #offArrayObject_contents @ r0<- newArray->contents 8174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r9, r9, #1 @ length--, check for neg 8175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance to next instr, load rINST 8176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi 2f @ was zero, bail 8177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ copy values from registers into the array 8179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ r0=array, r1=CCCC/FEDC, r9=length (from AA or B), r10=AA/BA 8180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r1, lsl #2 @ r2<- &fp[CCCC] 8182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: ldr r3, [r2], #4 @ r3<- *r2++ 8183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r9, r9, #1 @ count-- 8184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r0], #4 @ *contents++ = vX 8185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bpl 1b 8186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ continue at 2 8187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #4 @ length was initially 5? 8189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r10, #15 @ r2<- A 8190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f @ <= 4 args, branch 8191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- vA 8192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r9, r9, #1 @ count-- 8193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r0, #16] @ contents[4] = vA 8194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: and r2, r1, #15 @ r2<- F/E/D/C 8195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r3, r2) @ r3<- vF/vE/vD/vC 8196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, lsr #4 @ r1<- next reg in low 4 8197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r9, r9, #1 @ count-- 8198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r0], #4 @ *contents++ = vX 8199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bpl 1b 8200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ continue at 2 8201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 8204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ ip<- opcode from rINST 8205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ execute it 8206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception indicating that we have not implemented this 8209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mode of filled-new-array. 8210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_notimpl: 8212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, .L_strInternalError 8213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, .L_strFilledNewArrayNotImpl 8214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 8215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 8216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) @ define in one or the other, not both 8218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_strFilledNewArrayNotImpl: 8219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrFilledNewArrayNotImpl 8220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_strInternalError: 8221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrInternalError 8222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPL_FLOAT */ 8226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Test for NaN with a second comparison. EABI forbids testing bit 8228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ patterns, and we can't represent 0x7fc00000 in immediate form, so 8229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ make the library call. 8230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_gt_or_nan: 8231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r9 @ reverse order 8232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r10 8233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cfcmple @ r0<- Z set if eq, C clear if < 8234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bleq common_abort 8235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movcc r1, #1 @ (greater than) r1<- 1 8236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_CMPL_FLOAT_finish 8237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r1, #0 @ r1<- 1 or -1 for NaN 8238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_CMPL_FLOAT_finish 8239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if 0 /* "clasic" form */ 8242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 8243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 8244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 8245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r2) @ r9<- vBB 8246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r10, r3) @ r10<- vCC 8247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- vBB 8248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- vCC 8249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpeq @ r0<- (vBB == vCC) 8250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ equal? 8251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r1, #0 @ yes, result is 0 8252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne OP_CMPL_FLOAT_finish 8253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- vBB 8254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- vCC 8255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmplt @ r0<- (vBB < vCC) 8256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ less than? 8257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b OP_CMPL_FLOAT_continue 8258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@%break 8259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_CMPL_FLOAT_continue: 8261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r1, #0 @ yes, result is -1 8262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne OP_CMPL_FLOAT_finish 8263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- vBB 8264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- vCC 8265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpgt @ r0<- (vBB > vCC) 8266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ greater than? 8267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq OP_CMPL_FLOAT_nan @ no, must be NaN 8268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ yes, result is 1 8269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ fall through to _finish 8270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_CMPL_FLOAT_finish: 8272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 8273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r3) @ vAA<- r1 8275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is expected to be uncommon, so we double-branch (once to here, 8280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * again back to _finish). 8281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_CMPL_FLOAT_nan: 8283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r1, #0 @ r1<- 1 or -1 for NaN 8284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b OP_CMPL_FLOAT_finish 8285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 8287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPG_FLOAT */ 8290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Test for NaN with a second comparison. EABI forbids testing bit 8292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ patterns, and we can't represent 0x7fc00000 in immediate form, so 8293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ make the library call. 8294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_gt_or_nan: 8295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r9 @ reverse order 8296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r10 8297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cfcmple @ r0<- Z set if eq, C clear if < 8298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bleq common_abort 8299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movcc r1, #1 @ (greater than) r1<- 1 8300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_CMPG_FLOAT_finish 8301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ r1<- 1 or -1 for NaN 8302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_CMPG_FLOAT_finish 8303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if 0 /* "clasic" form */ 8306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 8307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r0, #255 @ r2<- BB 8308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r0, lsr #8 @ r3<- CC 8309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r9, r2) @ r9<- vBB 8310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r10, r3) @ r10<- vCC 8311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- vBB 8312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- vCC 8313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpeq @ r0<- (vBB == vCC) 8314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ equal? 8315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r1, #0 @ yes, result is 0 8316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne OP_CMPG_FLOAT_finish 8317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- vBB 8318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- vCC 8319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmplt @ r0<- (vBB < vCC) 8320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ less than? 8321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b OP_CMPG_FLOAT_continue 8322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@%break 8323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_CMPG_FLOAT_continue: 8325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r1, #0 @ yes, result is -1 8326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne OP_CMPG_FLOAT_finish 8327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- vBB 8328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- vCC 8329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpgt @ r0<- (vBB > vCC) 8330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ greater than? 8331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq OP_CMPG_FLOAT_nan @ no, must be NaN 8332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ yes, result is 1 8333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ fall through to _finish 8334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_CMPG_FLOAT_finish: 8336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ r3<- AA 8337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r3) @ vAA<- r1 8339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is expected to be uncommon, so we double-branch (once to here, 8344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * again back to _finish). 8345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_CMPG_FLOAT_nan: 8347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ r1<- 1 or -1 for NaN 8348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b OP_CMPG_FLOAT_finish 8349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 8351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPL_DOUBLE */ 8354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Test for NaN with a second comparison. EABI forbids testing bit 8356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ patterns, and we can't represent 0x7fc00000 in immediate form, so 8357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ make the library call. 8358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_gt_or_nan: 8359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r10, {r0-r1} @ reverse order 8360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r2-r3} 8361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cdcmple @ r0<- Z set if eq, C clear if < 8362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bleq common_abort 8363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movcc r1, #1 @ (greater than) r1<- 1 8364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_CMPL_DOUBLE_finish 8365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r1, #0 @ r1<- 1 or -1 for NaN 8366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_CMPL_DOUBLE_finish 8367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPG_DOUBLE */ 8370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Test for NaN with a second comparison. EABI forbids testing bit 8372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ patterns, and we can't represent 0x7fc00000 in immediate form, so 8373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ make the library call. 8374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_gt_or_nan: 8375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r10, {r0-r1} @ reverse order 8376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r2-r3} 8377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_cdcmple @ r0<- Z set if eq, C clear if < 8378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bleq common_abort 8379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movcc r1, #1 @ (greater than) r1<- 1 8380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcc .LOP_CMPG_DOUBLE_finish 8381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ r1<- 1 or -1 for NaN 8382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LOP_CMPG_DOUBLE_finish 8383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMP_LONG */ 8386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_less: 8388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvn r1, #0 @ r1<- -1 8389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Want to cond code the next mov so we can avoid branch, but don't see it; 8390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ instead, we just replicate the tail end. 8391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r9) @ vAA<- r1 8393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_greater: 8397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ r1<- 1 8398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ fall through to _finish 8399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_finish: 8401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r1, r9) @ vAA<- r1 8403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_AGET_WIDE */ 8408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_AGET_WIDE_finish: 8410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, #offArrayObject_contents 8412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r0, {r2-r3} @ r2/r3 <- vBB[vCC] 8413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 8414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r2-r3} @ vAA/vAA+1<- r2/r3 8416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_APUT_WIDE */ 8420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_WIDE_finish: 8422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r2-r3} @ r2/r3<- vAA/vAA+1 8424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, #offArrayObject_contents 8426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r0, {r2-r3} @ vBB[vCC] <- r2/r3 8427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_APUT_OBJECT */ 8431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 = vBB (arrayObj) 8434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 = vAA (obj) 8435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 = offset into array (vBB + vCC * width) 8436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_OBJECT_finish: 8438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ storing null reference? 8439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LOP_APUT_OBJECT_skip_check @ yes, skip type checks 8440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, #offObject_clazz] @ r0<- obj->clazz 8441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r1, #offObject_clazz] @ r1<- arrayObj->clazz 8442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmCanPutArrayElement @ test object type vs. array type 8443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ okay? 8444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errArrayStore @ no 8445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_OBJECT_skip_check: 8446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r9, [r10, #offArrayObject_contents] @ vBB[vCC]<- vAA 8449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET */ 8453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_finish: 8460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak0 8461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits) 8465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 8470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_WIDE */ 8474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_WIDE_finish: 8481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, r9, r3 @ r9<- obj + field offset 8486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r0-r1} @ r0/r1<- obj.field (64-bit align ok) 8487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r2, lsl #2 @ r3<- &fp[A] 8490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r3, {r0-r1} @ fp[A]<- r0/r1 8492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_OBJECT */ 8496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_OBJECT_finish: 8503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak0 8504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits) 8508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 8513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_BOOLEAN */ 8517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BOOLEAN_finish: 8524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak1 8525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits) 8529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 8534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_BYTE */ 8538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BYTE_finish: 8545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak2 8546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits) 8550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 8555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_CHAR */ 8559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_CHAR_finish: 8566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak3 8567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits) 8571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 8576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_SHORT */ 8580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_SHORT_finish: 8587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak4 8588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits) 8592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(r0, r2) @ fp[A]<- r0 8597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT */ 8601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_finish: 8608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak0 8609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- A+ 8610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #15 @ r1<- A 8612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- fp[A] 8614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0 8618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_WIDE */ 8622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_WIDE_finish: 8629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, rINST, lsr #8 @ r2<- A+ 8630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #15 @ r2<- A 8632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r2, rFP, r2, lsl #2 @ r3<- &fp[A] 8634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r2, {r0-r1} @ r0/r1<- fp[A] 8637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, r9, r3 @ r9<- object + byte offset 8639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ obj.field (64 bits, aligned)<- r0/r1 8640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_OBJECT */ 8644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_OBJECT_finish: 8651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak0 8652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- A+ 8653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #15 @ r1<- A 8655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- fp[A] 8657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0 8661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_BOOLEAN */ 8665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BOOLEAN_finish: 8672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak1 8673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- A+ 8674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #15 @ r1<- A 8676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- fp[A] 8678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0 8682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_BYTE */ 8686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BYTE_finish: 8693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak2 8694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- A+ 8695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #15 @ r1<- A 8697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- fp[A] 8699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0 8703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_CHAR */ 8707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_CHAR_finish: 8714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak3 8715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- A+ 8716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #15 @ r1<- A 8718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- fp[A] 8720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0 8724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_SHORT */ 8728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 8731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 holds resolved field 8732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds object 8733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_SHORT_finish: 8735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_squeak4 8736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, rINST, lsr #8 @ r1<- A+ 8737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field 8738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r1, r1, #15 @ r1<- A 8739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r9, #0 @ check object for null 8740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r1) @ r0<- fp[A] 8741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ object was null 8742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 8743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 8744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0 8745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 8746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET */ 8749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_resolve: 8755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_finish @ yes, finish 8761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_WIDE */ 8765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_resolve: 8771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_WIDE_finish @ yes, finish 8777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_OBJECT */ 8781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_resolve: 8787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_OBJECT_finish @ yes, finish 8793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_BOOLEAN */ 8797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_resolve: 8803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_BOOLEAN_finish @ yes, finish 8809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_BYTE */ 8813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_resolve: 8819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_BYTE_finish @ yes, finish 8825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_CHAR */ 8829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_resolve: 8835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_CHAR_finish @ yes, finish 8841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_SHORT */ 8845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_resolve: 8851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SGET_SHORT_finish @ yes, finish 8857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT */ 8861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_resolve: 8867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_finish @ yes, finish 8873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_WIDE */ 8877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9: &fp[AA] 8882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_WIDE_resolve: 8884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_WIDE_finish @ yes, finish 8890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_OBJECT */ 8894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_OBJECT_resolve: 8900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_OBJECT_finish @ yes, finish 8906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_BOOLEAN */ 8910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_resolve: 8916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_BOOLEAN_finish @ yes, finish 8922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_BYTE */ 8926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_resolve: 8932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_BYTE_finish @ yes, finish 8938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_CHAR */ 8942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_resolve: 8948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_CHAR_finish @ yes, finish 8954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_SHORT */ 8958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 8961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 8962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_resolve: 8964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 8965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 8966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 8967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 8968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 8969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_SPUT_SHORT_finish @ yes, finish 8970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 8971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL */ 8974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 8977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = resolved base method 8978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 = C or CCCC (index of first arg, which is the "this" ptr) 8979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_continue: 8981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r10) @ r1<- "this" ptr 8982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrh r2, [r0, #offMethod_methodIndex] @ r2<- baseMethod->methodIndex 8983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is "this" null? 8984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null "this", throw exception 8985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r1, #offObject_clazz] @ r1<- thisPtr->clazz 8986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offClassObject_vtable] @ r3<- thisPtr->clazz->vtable 8987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r2, lsl #2] @ r3<- vtable[methodIndex] 8988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodNoRange @ continue on 8989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_SUPER */ 8992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 8995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = resolved base method 8996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 = method->clazz 8997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_continue: 8999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r9, #offClassObject_super] @ r1<- method->clazz->super 9000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrh r2, [r0, #offMethod_methodIndex] @ r2<- baseMethod->methodIndex 9001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r1, #offClassObject_vtableCount] @ r3<- super->vtableCount 9002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 9003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (methodIndex, vtableCount) 9004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs .LOP_INVOKE_SUPER_nsm @ method not present in superclass 9005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r1, #offClassObject_vtable] @ r1<- ...clazz->super->vtable 9006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r1, r2, lsl #2] @ r3<- vtable[methodIndex] 9007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodNoRange @ continue on 9008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_resolve: 9010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- method->clazz 9011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_VIRTUAL @ resolver method type 9012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 9013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 9014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_SUPER_continue @ no, continue 9015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 9016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 9019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = resolved base method 9020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_nsm: 9022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offMethod_name] @ r1<- method name 9023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errNoSuchMethod 9024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_DIRECT */ 9027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 = reference (BBBB or CCCC) 9031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 = "this" register 9032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_resolve: 9034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 9035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 9036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_DIRECT @ resolver method type 9037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 9038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 9039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r10) @ r2<- "this" ptr (reload) 9040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_DIRECT_finish @ no, continue 9041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 9042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL_RANGE */ 9045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 9048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = resolved base method 9049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 = C or CCCC (index of first arg, which is the "this" ptr) 9050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_RANGE_continue: 9052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r10) @ r1<- "this" ptr 9053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrh r2, [r0, #offMethod_methodIndex] @ r2<- baseMethod->methodIndex 9054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ is "this" null? 9055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ null "this", throw exception 9056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r1, #offObject_clazz] @ r1<- thisPtr->clazz 9057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offClassObject_vtable] @ r3<- thisPtr->clazz->vtable 9058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, r2, lsl #2] @ r3<- vtable[methodIndex] 9059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodRange @ continue on 9060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_SUPER_RANGE */ 9063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 9066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = resolved base method 9067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 = method->clazz 9068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_continue: 9070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r9, #offClassObject_super] @ r1<- method->clazz->super 9071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrh r2, [r0, #offMethod_methodIndex] @ r2<- baseMethod->methodIndex 9072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r1, #offClassObject_vtableCount] @ r3<- super->vtableCount 9073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ must export for invoke 9074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, r3 @ compare (methodIndex, vtableCount) 9075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs .LOP_INVOKE_SUPER_RANGE_nsm @ method not present in superclass 9076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r1, #offClassObject_vtable] @ r1<- ...clazz->super->vtable 9077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r1, r2, lsl #2] @ r3<- vtable[methodIndex] 9078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_invokeMethodRange @ continue on 9079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_resolve: 9081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- method->clazz 9082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_VIRTUAL @ resolver method type 9083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 9084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 9085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_SUPER_RANGE_continue @ no, continue 9086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 9087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 9090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = resolved base method 9091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_nsm: 9093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offMethod_name] @ r1<- method name 9094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_errNoSuchMethod 9095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_DIRECT_RANGE */ 9098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 = reference (BBBB or CCCC) 9102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 = "this" register 9103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_resolve: 9105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_method] @ r3<- glue->method 9106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz 9107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #METHOD_DIRECT @ resolver method type 9108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveMethod @ r0<- call(clazz, ref, flags) 9109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ got null? 9110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r10) @ r2<- "this" ptr (reload) 9111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LOP_INVOKE_DIRECT_RANGE_finish @ no, continue 9112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ yes, handle exception 9113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FLOAT_TO_LONG */ 9116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert the float in r0 to a long in r0/r1. 9118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We have to clip values to long min/max per the specification. The 9120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected common case is a "reasonable" value that converts directly 9121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to modest integer. The EABI convert function isn't doing this for us. 9122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectf2l_doconv: 9124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r4, lr} 9125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0x5f000000 @ (float)maxlong 9126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r4, r0 9127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpge @ is arg >= maxlong? 9128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 9129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r0, #0 @ return maxlong (7fffffff) 9130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r1, #0x80000000 9131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmnefd sp!, {r4, pc} 9132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 9134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0xdf000000 @ (float)minlong 9135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmple @ is arg <= minlong? 9136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 9137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r0, #0 @ return minlong (80000000) 9138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r1, #0x80000000 9139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmnefd sp!, {r4, pc} 9140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 9142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r4 9143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpeq @ is arg == self? 9144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ zero == no 9145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project moveq r1, #0 @ return zero for NaN 9146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmeqfd sp!, {r4, pc} 9147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 9149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_f2lz @ convert float to long 9150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r4, pc} 9151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DOUBLE_TO_LONG */ 9154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert the double in r0/r1 to a long in r0/r1. 9156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We have to clip values to long min/max per the specification. The 9158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected common case is a "reasonable" value that converts directly 9159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to modest integer. The EABI convert function isn't doing this for us. 9160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectd2l_doconv: 9162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r4, r5, lr} @ save regs 9163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, .LOP_DOUBLE_TO_LONG_max @ (double)maxlong, hi 9164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub sp, sp, #4 @ align for EABI 9165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ (double)maxlong, lo 9166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r4, r0 @ save r0 9167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r5, r1 @ and r1 9168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dcmpge @ is arg >= maxlong? 9169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 9170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r0, #0 @ return maxlong (7fffffffffffffff) 9171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r1, #0x80000000 9172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f 9173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 9175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r5 9176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, .LOP_DOUBLE_TO_LONG_min @ (double)minlong, hi 9177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, #0 @ (double)minlong, lo 9178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dcmple @ is arg <= minlong? 9179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 9180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r0, #0 @ return minlong (8000000000000000) 9181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r1, #0x80000000 9182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1f 9183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 9185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r5 9186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, r4 @ compare against self 9187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r5 9188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_dcmpeq @ is arg == self? 9189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ zero == no 9190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project moveq r1, #0 @ return zero for NaN 9191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq 1f 9192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 9194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r5 9195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_d2lz @ convert double to long 9196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 9198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add sp, sp, #4 9199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r4, r5, pc} 9200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_max: 9202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word 0x43e00000 @ maxlong, as a double (high word) 9203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_min: 9204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word 0xc3e00000 @ minlong, as a double (high word) 9205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MUL_LONG */ 9208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MUL_LONG_finish: 9210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r0, {r9-r10} @ vAA/vAA+1<- r9/r10 9212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHL_LONG */ 9216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHL_LONG_finish: 9218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, asl r2 @ r0<- r0 << r2 9219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 9221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHR_LONG */ 9225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHR_LONG_finish: 9227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, asr r2 @ r1<- r1 >> r2 9228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 9230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_USHR_LONG */ 9234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_USHR_LONG_finish: 9236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, lsr r2 @ r1<- r1 >>> r2 9237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 9239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHL_LONG_2ADDR */ 9243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHL_LONG_2ADDR_finish: 9245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 9247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHR_LONG_2ADDR */ 9251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHR_LONG_2ADDR_finish: 9253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 9255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_USHR_LONG_2ADDR */ 9259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_USHR_LONG_2ADDR_finish: 9261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 9263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_EXECUTE_INLINE */ 9267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Extract args, call function. 9270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 = #of args (0-4) 9271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r10 = call index 9272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * lr = return addr, above [DO NOT bl out of here w/o preserving LR] 9273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Other ideas: 9275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * - Use a jump table from the main piece to jump directly into the 9276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * AND/LDR pairs. Costs a data load, saves a branch. 9277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * - Have five separate pieces that do the loading, so we can work the 9278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * interleave a little better. Increases code size. 9279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_EXECUTE_INLINE_continue: 9281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r0, r0, #4 @ r0<- 4-r0 9282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r9, 2) @ r9<- FEDC 9283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add pc, pc, r0, lsl #3 @ computed goto, 2 instrs each 9284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort @ (skipped due to ARM prefetch) 9285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project4: and ip, r9, #0xf000 @ isolate F 9286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rFP, ip, lsr #10] @ r3<- vF (shift right 12, left 2) 9287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: and ip, r9, #0x0f00 @ isolate E 9288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rFP, ip, lsr #6] @ r2<- vE 9289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: and ip, r9, #0x00f0 @ isolate D 9290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [rFP, ip, lsr #2] @ r1<- vD 9291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: and ip, r9, #0x000f @ isolate C 9292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rFP, ip, lsl #2] @ r0<- vC 9293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project0: 9294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, .LOP_EXECUTE_INLINE_table @ table of InlineOperation 9295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LDR_PC "[r9, r10, lsl #4]" @ sizeof=16, "func" is first entry 9296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ (not reached) 9297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_EXECUTE_INLINE_table: 9299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word gDvmInlineOpsTable 9300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size dvmAsmSisterStart, .-dvmAsmSisterStart 9303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmSisterEnd 9304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterEnd: 9305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: armv5te/footer.S */ 9307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 9309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common subroutines and data 9310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 9311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 9314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .align 2 9315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code when a backward branch is taken. 9318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 is PC adjustment *in bytes* 9321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_backwardBranch: 9323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, #kInterpEntryInstr 9324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_periodicChecks 9325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 9326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Need to see if the thread needs to be suspended or debugger/profiler 9332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * activity has begun. 9333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: if JDWP isn't running, zero out pDebuggerActive pointer so we don't 9335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * have to do the second ldr. 9336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: reduce this so we're just checking a single location. 9338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 is reentry type, e.g. kInterpEntryInstr 9341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 is trampoline PC adjustment *in bytes* 9342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_periodicChecks: 9344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_pSelfSuspendCount] @ r3<- &suspendCount 9345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) 9347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [rGLUE, #offGlue_pDebuggerActive] @ r1<- &debuggerActive 9348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_PROFILER) 9350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_pActiveProfilers] @ r2<- &activeProfilers 9351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3] @ r3<- suspendCount (int) 9354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) 9356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r1, [r1] @ r1<- debuggerActive (boolean) 9357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined (WITH_PROFILER) 9359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2] @ r2<- activeProfilers (int) 9360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, #0 @ suspend pending? 93633a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden bne 2f @ yes, do full suspension check 9364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) || defined(WITH_PROFILER) 9366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# if defined(WITH_DEBUGGER) && defined(WITH_PROFILER) 9367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orrs r1, r1, r2 @ r1<- r1 | r2 9368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ debugger attached or profiler started? 9369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# elif defined(WITH_DEBUGGER) 9370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ debugger attached? 9371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# elif defined(WITH_PROFILER) 9372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ profiler started? 9373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# endif 9374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 3f @ debugger/profiler, switch interp 9375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr @ nothing to do, return 9378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: @ check suspend 9380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 93813a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden EXPORT_PC() @ need for precise GC 9382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b dvmCheckSuspendPending @ suspend if necessary, then return 9383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: @ debugger/profiler enabled, bail out 9385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add rPC, rPC, r9 @ update rPC 9386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [rGLUE, #offGlue_entryPoint] 9387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #1 @ "want switch" = true 9388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_gotoBail 9389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The equivalent of "goto bail", this calls through the "bail handler". 9393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * State registers will be saved to the "glue" area before bailing. 9395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1 is "bool changeInterp", indicating if we want to switch to the 9398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * other interpreter or just bail all the way out 9399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_gotoBail: 9401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_FP_TO_GLUE() @ export state to "glue" 9402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rGLUE @ r0<- glue ptr 9403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b dvmMterpStdBail @ call(glue, changeInterp) 9404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @add r1, r1, #1 @ using (boolean+1) 9406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @add r0, rGLUE, #offGlue_jmpBuf @ r0<- &glue->jmpBuf 9407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl _longjmp @ does not return 9408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @bl common_abort 9409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for method invocation with range. 9413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 is "Method* methodToCall", the method we're trying to call 9416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_invokeMethodRange: 9418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeNewRange: 9419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ prepare to copy args to "outs" area of current frame 9420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r2, rINST, lsr #8 @ r2<- AA (arg count) -- test for zero 9421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(r10, rFP) @ r10<- stack save area 9422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .LinvokeArgsDone @ if no args, skip the rest 9423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 2) @ r1<- CCCC 9424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ r0=methodToCall, r1=CCCC, r2=count, r10=outs 9426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ (very few methods have > 10 args; could unroll for common cases) 9427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r1, lsl #2 @ r3<- &fp[CCCC] 9428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r10, r10, r2, lsl #2 @ r10<- "outs" area, for call args 94293a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldrh r9, [r0, #offMethod_registersSize] @ r9<- methodToCall->regsSize 9430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: ldr r1, [r3], #4 @ val = *fp++ 9431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs r2, r2, #1 @ count-- 9432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r10], #4 @ *outs++ = val 9433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne 1b @ ...while count != 0 94343a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldrh r3, [r0, #offMethod_outsSize] @ r3<- methodToCall->outsSize 9435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .LinvokeArgsDone 9436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for method invocation without range. 9439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 is "Method* methodToCall", the method we're trying to call 9442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_invokeMethodNoRange: 9444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeNewNoRange: 9445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ prepare to copy args to "outs" area of current frame 9446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movs r2, rINST, lsr #12 @ r2<- B (arg count) -- test for zero 9447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(r10, rFP) @ r10<- stack save area 94483a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden FETCH(r1, 2) @ r1<- GFED (load here to hide latency) 94493a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldrh r9, [r0, #offMethod_registersSize] @ r9<- methodToCall->regsSize 94503a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldrh r3, [r0, #offMethod_outsSize] @ r3<- methodToCall->outsSize 94513a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden beq .LinvokeArgsDone 9452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 94533a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden @ r0=methodToCall, r1=GFED, r3=outSize, r2=count, r9=regSize, r10=outs 9454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeNonRange: 9455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r2, r2, #5 @ r2<- 5-r2 9456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add pc, pc, r2, lsl #4 @ computed goto, 4 instrs each 9457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_abort @ (skipped due to ARM prefetch) 9458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project5: and ip, rINST, #0x0f00 @ isolate A 94593a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr r2, [rFP, ip, lsr #6] @ r2<- vA (shift right 8, left 2) 9460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0 @ nop 94613a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden str r2, [r10, #-4]! @ *--outs = vA 9462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project4: and ip, r1, #0xf000 @ isolate G 94633a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr r2, [rFP, ip, lsr #10] @ r2<- vG (shift right 12, left 2) 9464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0 @ nop 94653a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden str r2, [r10, #-4]! @ *--outs = vG 9466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: and ip, r1, #0x0f00 @ isolate F 94673a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr r2, [rFP, ip, lsr #6] @ r2<- vF 9468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0 @ nop 94693a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden str r2, [r10, #-4]! @ *--outs = vF 9470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: and ip, r1, #0x00f0 @ isolate E 94713a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr r2, [rFP, ip, lsr #2] @ r2<- vE 9472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0 @ nop 94733a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden str r2, [r10, #-4]! @ *--outs = vE 9474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: and ip, r1, #0x000f @ isolate D 94753a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr r2, [rFP, ip, lsl #2] @ r2<- vD 9476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0 @ nop 94773a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden str r2, [r10, #-4]! @ *--outs = vD 9478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project0: @ fall through to .LinvokeArgsDone 9479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 94803a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden.LinvokeArgsDone: @ r0=methodToCall, r3=outSize, r9=regSize 94813a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr r2, [r0, #offMethod_insns] @ r2<- method->insns 94823a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr rINST, [r0, #offMethod_clazz] @ rINST<- method->clazz 9483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ find space for the new stack frame, check for overflow 9484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(r1, rFP) @ r1<- stack save area 94853a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden sub r1, r1, r9, lsl #2 @ r1<- newFp (old savearea - regsSize) 9486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(r10, r1) @ r10<- newSaveArea 9487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@ bl common_dumpRegs 9488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [rGLUE, #offGlue_interpStackEnd] @ r9<- interpStackEnd 9489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r3, r10, r3, lsl #2 @ r3<- bottom (newsave - outsSize) 9490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r3, r9 @ bottom < interpStackEnd? 94913a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr r3, [r0, #offMethod_accessFlags] @ r3<- methodToCall->accessFlags 9492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blt .LstackOverflow @ yes, this frame will overflow stack 9493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ set up newSaveArea 9495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef EASY_GDB 9496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(ip, rFP) @ ip<- stack save area 9497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str ip, [r10, #offStackSaveArea_prevSave] 9498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str rFP, [r10, #offStackSaveArea_prevFrame] 9500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str rPC, [r10, #offStackSaveArea_savedPc] 9501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r10, #offStackSaveArea_method] 9502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project tst r3, #ACC_NATIVE 9503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .LinvokeNative 9504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0-r3} 9507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_printNewline 9508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rFP 9509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 9510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmDumpFp 9511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0-r3} 9512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0-r3} 9513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r1 9514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 9515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmDumpFp 9516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_printNewline 9517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0-r3} 9518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 95203a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldrh r9, [r2] @ r9 <- load INST from new PC 95213a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr r3, [rINST, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex 95223a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden mov rPC, r2 @ publish new rPC 95233a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr r2, [rGLUE, #offGlue_self] @ r2<- glue->self 95243a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden 9525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Update "glue" values for the new method 95263a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden @ r0=methodToCall, r1=newFp, r2=self, r3=newMethodClass, r9=newINST 9527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [rGLUE, #offGlue_method] @ glue->method = methodToCall 9528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [rGLUE, #offGlue_methodClassDex] @ glue->methodClassDex = ... 9529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov rFP, r1 @ fp = newFp 95303a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden GET_PREFETCHED_OPCODE(ip, r9) @ extract prefetched opcode from r9 95313a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden mov rINST, r9 @ publish new rINST 9532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r2, #offThread_curFrame] @ self->curFrame = newFp 9533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeNative: 9536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ Prep for the native call 9537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ r0=methodToCall, r1=newFp, r10=newSaveArea 9538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [rGLUE, #offGlue_self] @ r3<- glue->self 9539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [r3, #offThread_jniLocal_nextEntry] @ r9<- thread->refNext 9540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [r3, #offThread_curFrame] @ self->curFrame = newFp 9541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r9, [r10, #offStackSaveArea_localRefTop] @newFp->localRefTop=refNext 9542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, r3 @ r9<- glue->self (preserve) 9543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, r0 @ r2<- methodToCall 9545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r1 @ r0<- newFp (points to args) 9546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r1, rGLUE, #offGlue_retval @ r1<- &retval 9547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef ASSIST_DEBUGGER 9549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* insert fake function header to help gdb find the stack frame */ 9550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .Lskip 9551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dalvik_mterp, %function 9552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectdalvik_mterp: 9553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .fnstart 9554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MTERP_ENTRY1 9555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MTERP_ENTRY2 9556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lskip: 9557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @mov lr, pc @ set return addr 9560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ldr pc, [r2, #offMethod_nativeFunc] @ pc<- methodToCall->nativeFunc 9561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LDR_PC_LR "[r2, #offMethod_nativeFunc]" 9562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ native return; r9=self, r10=newSaveArea 9564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ equivalent to dvmPopJniLocals 9565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r10, #offStackSaveArea_localRefTop] @ r0<- newSave->localRefTop 9566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r9, #offThread_exception] @ check for exception 9567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str rFP, [r9, #offThread_curFrame] @ self->curFrame = fp 9568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ null? 9569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [r9, #offThread_jniLocal_nextEntry] @ self->refNext<- r0 9570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne common_exceptionThrown @ no, handle exception 9571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(3) @ advance rPC, load rINST 9573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstackOverflow: 9577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- self 9578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmHandleStackOverflow 9579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 9580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef ASSIST_DEBUGGER 9581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .fnend 9582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for method invocation, calling through "glue code". 9587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: now that we have range and non-range invoke handlers, this 9589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * needs to be split into two. Maybe just create entry points 9590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that set r9 and jump here? 9591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r0 is "Method* methodToCall", the method we're trying to call 9594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 is "bool methodCallRange", indicating if this is a /range variant 9595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 9597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LinvokeOld: 9598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub sp, sp, #8 @ space for args + pad 9599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(ip, 2) @ ip<- FEDC or CCCC 9600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, r0 @ A2<- methodToCall 9601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rGLUE @ A0<- glue 9602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_FP_TO_GLUE() @ export state to "glue" 9603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r9 @ A1<- methodCallRange 9604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, rINST, lsr #8 @ A3<- AA 9605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str ip, [sp, #0] @ A4<- ip 9606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmMterp_invokeMethod @ call the C invokeMethod 9607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add sp, sp, #8 @ remove arg area 9608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_resumeAfterGlueCall @ continue to next instruction 9609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 9610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for handling a return instruction. 9615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This does not return. 9617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_returnFromMethod: 9619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LreturnNew: 9620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, #kInterpEntryReturn 9621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #0 9622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_periodicChecks 9623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(r0, rFP) @ r0<- saveArea (old) 9625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr rFP, [r0, #offStackSaveArea_prevFrame] @ fp = saveArea->prevFrame 96263a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr r9, [r0, #offStackSaveArea_savedPc] @ r9 = saveArea->savedPc 9627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rFP, #(offStackSaveArea_method - sizeofStackSaveArea)] 9628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ r2<- method we're returning to 96293a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr r3, [rGLUE, #offGlue_self] @ r3<- glue->self 9630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r2, #0 @ is this a break frame? 96313a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldrne r10, [r2, #offMethod_clazz] @ r10<- method->clazz 9632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 @ "want switch" = false 9633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_gotoBail @ break frame, bail out completely 9634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 96353a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden PREFETCH_ADVANCE_INST(rINST, r9, 3) @ advance r9, update new rINST 96363a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden str r2, [rGLUE, #offGlue_method]@ glue->method = newSave->method 96373a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden ldr r1, [r10, #offClassObject_pDvmDex] @ r1<- method->clazz->pDvmDex 9638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str rFP, [r3, #offThread_curFrame] @ self->curFrame = fp 9639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 96403a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden mov rPC, r9 @ publish new rPC 9641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [rGLUE, #offGlue_methodClassDex] 9642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return handling, calls through "glue code". 9646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 9648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LreturnOld: 9649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_FP_TO_GLUE() @ export state 9650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rGLUE @ arg to function 9651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmMterp_returnFromMethod 9652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_resumeAfterGlueCall 9653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 9654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Somebody has thrown an exception. Handle it. 9658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the exception processing code returns to us (instead of falling 9660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out of the interpreter), continue with whatever the next instruction 9661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * now happens to be. 9662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This does not return. 9664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_exceptionThrown: 9666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LexceptionNew: 9667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, #kInterpEntryThrow 9668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, #0 9669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl common_periodicChecks 9670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r10, [rGLUE, #offGlue_self] @ r10<- glue->self 9672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r9, [r10, #offThread_exception] @ r9<- self->exception 9673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- self 9674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- exception 9675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmAddTrackedAlloc @ don't let the exception be GCed 9676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, #0 @ r3<- NULL 9677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r3, [r10, #offThread_exception] @ self->exception = NULL 9678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* set up args and a local for "&fp" */ 9680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* (str sp, [sp, #-4]! would be perfect here, but is discouraged) */ 9681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str rFP, [sp, #-4]! @ *--sp = fp 9682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov ip, sp @ ip<- &fp 9683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, #0 @ r3<- false 9684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str ip, [sp, #-4]! @ *--sp = &fp 9685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [rGLUE, #offGlue_method] @ r1<- glue->method 9686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r10 @ r0<- self 9687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r1, #offMethod_insns] @ r1<- method->insns 9688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, r9 @ r2<- exception 9689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r1, rPC, r1 @ r1<- pc - method->insns 9690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, asr #1 @ r1<- offset in code units 9691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* call, r0 gets catchRelPc (a code-unit offset) */ 9693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmFindCatchBlock @ call(self, relPc, exc, scan?, &fp) 9694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* fix earlier stack overflow if necessary; may trash rFP */ 9696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r1, [r10, #offThread_stackOverflowed] 9697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ did we overflow earlier? 9698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq 1f @ no, skip ahead 9699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov rFP, r0 @ save relPc result in rFP 9700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r10 @ r0<- self 9701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmCleanupStackOverflow @ call(self) 9702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rFP @ restore result 9703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 9704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* update frame pointer and check result from dvmFindCatchBlock */ 9706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr rFP, [sp, #4] @ retrieve the updated rFP 9707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is catchRelPc < 0? 9708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add sp, sp, #8 @ restore stack 9709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bmi .LnotCaughtLocally 9710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* adjust locals to match self->curFrame and updated PC */ 9712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(r1, rFP) @ r1<- new save area 9713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r1, #offStackSaveArea_method] @ r1<- new method 9714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r1, [rGLUE, #offGlue_method] @ glue->method = new method 9715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r1, #offMethod_clazz] @ r2<- method->clazz 9716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r1, #offMethod_insns] @ r3<- method->insns 9717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offClassObject_pDvmDex] @ r2<- method->clazz->pDvmDex 9718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add rPC, r3, r0, asl #1 @ rPC<- method->insns + catchRelPc 9719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r2, [rGLUE, #offGlue_methodClassDex] @ glue->pDvmDex = meth... 9720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* release the tracked alloc on the exception */ 9722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- exception 9723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- self 9724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmReleaseTrackedAlloc @ release the exception 9725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* restore the exception if the handler wants it */ 9727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() @ load rINST from rPC 9728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp ip, #OP_MOVE_EXCEPTION @ is it "move-exception"? 9730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project streq r9, [r10, #offThread_exception] @ yes, restore the exception 9731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LnotCaughtLocally: @ r9=exception, r10=self 9734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* fix stack overflow if necessary */ 9735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldrb r1, [r10, #offThread_stackOverflowed] 9736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, #0 @ did we overflow earlier? 9737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r0, r10 @ if yes: r0<- self 9738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blne dvmCleanupStackOverflow @ if yes: call(self) 9739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ may want to show "not caught locally" debug messages here 9741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if DVM_SHOW_EXCEPTION >= 2 9742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* call __android_log_print(prio, tag, format, ...) */ 9743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* "Exception %s from %s:%d not caught locally" */ 9744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ dvmLineNumFromPC(method, pc - method->insns) 9745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_method] 9746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, [r0, #offMethod_insns] 9747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub r1, rPC, r1 9748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project asr r1, r1, #1 9749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmLineNumFromPC 9750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [sp, #-4]! 9751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ dvmGetMethodSourceFile(method) 9752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_method] 9753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmGetMethodSourceFile 9754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r0, [sp, #-4]! 9755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ exception->clazz->descriptor 9756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r9, #offObject_clazz] 9757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r3, #offClassObject_descriptor] 9758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @ 9759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, strExceptionNotCaughtLocally 9760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, strLogTag 9761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, #3 @ LOG_DEBUG 9762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __android_log_print 9763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project str r9, [r10, #offThread_exception] @ restore exception 9765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r9 @ r0<- exception 9766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r10 @ r1<- self 9767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmReleaseTrackedAlloc @ release the exception 9768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 @ "want switch" = false 9769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_gotoBail @ bail out 9770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Exception handling, calls through "glue code". 9774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 9776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LexceptionOld: 9777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_FP_TO_GLUE() @ export state 9778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, rGLUE @ arg to function 9779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmMterp_exceptionThrown 9780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_resumeAfterGlueCall 9781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 9782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * After returning from a "glued" function, pull out the updated 9786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * values and start executing at the next instruction. 9787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_resumeAfterGlueCall: 9789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_PC_FP_FROM_GLUE() @ pull rPC and rFP out of glue 9790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() @ load rINST from rPC 9791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 9792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 9793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Invalid array index. 9796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayIndex: 9798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 9799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strArrayIndexException 9800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 9801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 9802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 9803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Invalid array value. 9806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayStore: 9808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 9809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strArrayStoreException 9810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 9811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 9812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 9813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Integer divide or mod by zero. 9816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errDivideByZero: 9818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 9819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strArithmeticException 9820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r1, strDivideByZero 9821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 9822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 9823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size. 9826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNegativeArraySize: 9828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 9829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strNegativeArraySizeException 9830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 9831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 9832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 9833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Invocation of a non-existent method. 9836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNoSuchMethod: 9838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 9839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strNoSuchMethodError 9840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 9841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 9842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 9843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We encountered a null object when we weren't expecting one. We 9846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * export the PC, throw a NullPointerException, and goto the exception 9847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * processing code. 9848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNullObject: 9850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 9851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strNullPointerException 9852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0 9853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmThrowException 9854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown 9855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For debugging, cause an immediate fault. The source address will 9858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be in lr (use a bl instruction to jump here). 9859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_abort: 9861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr pc, .LdeadFood 9862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LdeadFood: 9863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word 0xdeadf00d 9864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Spit out a "we were here", preserving all registers. (The attempt 9867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to save ip won't work, but we need to save an even number of 9868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers for EABI 64-bit stack alignment.) 9869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .macro SQUEAK num 9871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_squeak\num: 9872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 9873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strSqueak 9874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #\num 9875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl printf 9876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 9877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 9878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endm 9879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SQUEAK 0 9881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SQUEAK 1 9882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SQUEAK 2 9883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SQUEAK 3 9884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SQUEAK 4 9885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SQUEAK 5 9886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Spit out the number in r0, preserving registers. 9889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printNum: 9891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 9892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0 9893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strSqueak 9894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl printf 9895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 9896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 9897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Print a newline, preserving registers. 9900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printNewline: 9902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 9903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strNewline 9904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl printf 9905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 9906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 9907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 9909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Print the 32-bit quantity in r0 as a hex value, preserving registers. 9910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printHex: 9912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 9913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r0 9914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strPrintHex 9915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl printf 9916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 9917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 9918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Print the 64-bit quantity in r0-r1, preserving registers. 9921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printLong: 9923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 9924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r3, r1 9925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r2, r0 9926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, strPrintLong 9927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl printf 9928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 9929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 9930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Print full method info. Pass the Method* in r0. Preserves regs. 9933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_printMethod: 9935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 9936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmMterpPrintMethod 9937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 9938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 9939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Call a C helper function that dumps regs and possibly some 9942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * additional info. Requires the C function to be compiled in. 9943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 9945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_dumpRegs: 9946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r0, r1, r2, r3, ip, lr} 9947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmMterpDumpArmRegs 9948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r0, r1, r2, r3, ip, lr} 9949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bx lr 9950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 9951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * String references, must be close to the code that uses them. 9955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .align 2 9957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrArithmeticException: 9958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrArithmeticException 9959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrArrayIndexException: 9960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrArrayIndexException 9961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrArrayStoreException: 9962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrArrayStoreException 9963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrDivideByZero: 9964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrDivideByZero 9965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrNegativeArraySizeException: 9966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrNegativeArraySizeException 9967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrNoSuchMethodError: 9968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrNoSuchMethodError 9969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrNullPointerException: 9970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrNullPointerException 9971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrLogTag: 9973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrLogTag 9974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrExceptionNotCaughtLocally: 9975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrExceptionNotCaughtLocally 9976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrNewline: 9978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrNewline 9979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrSqueak: 9980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrSqueak 9981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrPrintHex: 9982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrPrintHex 9983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectstrPrintLong: 9984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .word .LstrPrintLong 9985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Zero-terminated ASCII string data. 9988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On ARM we have two choices: do like gcc does, and LDR from a .word 9990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * with the address, or use an ADR pseudo-op to get the address 9991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * directly. ADR saves 4 bytes and an indirection, but it's using a 9992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * PC-relative addressing mode and hence has a limited range, which 9993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * makes it not work well with mergeable string sections. 9994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .section .rodata.str1.4,"aMS",%progbits,1 9996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrBadEntryPoint: 9998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Bad entry point %d\n" 9999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArithmeticException: 10000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArithmeticException;" 10001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArrayIndexException: 10002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArrayIndexOutOfBoundsException;" 10003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArrayStoreException: 10004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArrayStoreException;" 10005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrClassCastException: 10006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ClassCastException;" 10007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrDivideByZero: 10008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "divide by zero" 10009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrFilledNewArrayNotImpl: 10010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "filled-new-array only implemented for objects and 'int'" 10011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInternalError: 10012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InternalError;" 10013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInstantiationError: 10014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InstantiationError;" 10015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNegativeArraySizeException: 10016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NegativeArraySizeException;" 10017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNoSuchMethodError: 10018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NoSuchMethodError;" 10019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNullPointerException: 10020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NullPointerException;" 10021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrLogTag: 10023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "mterp" 10024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrExceptionNotCaughtLocally: 10025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Exception %s from %s:%d not caught locally\n" 10026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNewline: 10028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "\n" 10029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrSqueak: 10030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "<%d>" 10031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrPrintHex: 10032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "<0x%x>" 10033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrPrintLong: 10034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "<%lld>" 10035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10037