InterpAsm-x86.S revision 3d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This file was generated automatically by gen-mterp.py for 'x86'. 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: x86/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 * 32-bit x86 definitions and declarations. 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project386 ABI general notes: 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectCaller save set: 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eax, edx, ecx, st(0)-st(7) 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectCallee save set: 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ebx, esi, edi, ebp 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectReturn regs: 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 32-bit in eax 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 64-bit in edx:eax (low-order 32 in eax) 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fp on top of fp stack st(0) 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectParameters passed on stack, pushed right-to-left. On entry to target, first 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectparm is at 4(%esp). Traditional entry code is: 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectfunctEntry: 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebp # save old frame pointer 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov %ebp,%esp # establish new frame pointer 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub FrameSize,%esp # Allocate storage for spill, locals & outs 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOnce past the prologue, arguments are referenced at ((argno + 2)*4)(%ebp) 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectAlignment of stack not strictly required, but should be for performance. We'll 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectalign frame sizes to 16-byte multiples. 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectIf we're not doing variable stack allocation (alloca), the frame pointer can be 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecteliminated and all arg references adjusted to be esp relative. 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectMterp notes: 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectSome key interpreter variables will be assigned to registers. Note that each 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectwill also have an associated spill location (mostly used useful for those assigned 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectto callee save registers). 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project nick reg purpose 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rPC edx interpreted program counter, used for fetching instructions 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rFP esi interpreted frame pointer, used for accessing locals and args 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rIBASE edi Base pointer for instruction dispatch computed goto 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rINST bx first 16-bit code of current instruction 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rOPCODE bl opcode portion of instruction word 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rINST_HI bh high byte of instruction word, usually contains src/tgt reg names 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectNotes: 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project o High order 16 bits of ebx must be zero on entry to handler 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project o rPC, rFP, rIBASE, rINST/rOPCODE valid on handler entry and exit 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project o eax and ecx are scratch, rINST/ebx sometimes scratch 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project o rPC is in the caller save set, and will be killed across external calls. Don't 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project forget to SPILL/UNSPILL it around call points 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rPC %edx 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rFP %esi 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rIBASE %edi 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rINST_FULL %ebx 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rINST %bx 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rINST_HI %bh 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rINST_LO %bl 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rOPCODE %bl 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Frame diagram while executing dvmMterpStdRun, high to low addresses */ 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define IN_ARG0 ( 8) 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define CALLER_RP ( 4) 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define PREV_FP ( 0) /* <- dvmMterpStdRun ebp */ 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Spill offsets relative to %ebp */ 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define EDI_SPILL ( -4) 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define ESI_SPILL ( -8) 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define EDX_SPILL (-12) /* <- esp following dmMterpStdRun header */ 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rPC_SPILL (-16) 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rFP_SPILL (-20) 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rGLUE_SPILL (-24) 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rIBASE_SPILL (-28) 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rINST_FULL_SPILL (-32) 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define TMP_SPILL (-36) 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL0_OFFSET (-40) 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL1_OFFSET (-44) 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL2_OFFSET (-48) 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL3_OFFSET (-52) 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Out Arg offsets, relative to %sp */ 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG4 ( 16) 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG3 ( 12) 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG2 ( 8) 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG1 ( 4) 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG0 ( 0) /* <- dvmMterpStdRun esp */ 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SPILL(reg) movl reg##,reg##_SPILL(%ebp) 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define UNSPILL(reg) movl reg##_SPILL(%ebp),reg 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SPILL_TMP(reg) movl reg,TMP_SPILL(%ebp) 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define UNSPILL_TMP(reg) movl TMP_SPILL(%ebp),reg 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* save/restore the PC and/or FP from the glue struct */ 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOAD_PC_FROM_GLUE(_glu) movl offGlue_pc(_glu),rPC 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVE_PC_TO_GLUE(_glu) movl rPC,offGlue_pc(_glu) 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOAD_FP_FROM_GLUE(_glu) movl offGlue_fp(_glu),rFP 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVE_FP_TO_GLUE(_glu) movl rFP,offGlue_fp(_glu) 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GET_GLUE(_reg) movl rGLUE_SPILL(%ebp),_reg 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* The interpreter assumes a properly aligned stack on entry, and 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * will preserve 16-byte alignment. 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "export" the PC to the interpreted stack frame, f/b/o future exception 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * objects. Must * be done *before* something calls dvmThrowException. 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "SAVEAREA_FROM_FP(fp)->xtra.currentPc = pc", i.e. 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fp - sizeof(StackSaveArea) + offsetof(SaveArea, xtra.currentPc) 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * It's okay to do this more than once. 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define EXPORT_PC() \ 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC, (-sizeofStackSaveArea + offStackSaveArea_currentPc)(rFP) 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Given a frame pointer, find the stack save area. 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "((StackSaveArea*)(_fp) -1)". 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVEAREA_FROM_FP(_reg, _fpreg) \ 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal -sizeofStackSaveArea(_fpreg),_reg 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch the next instruction from rPC into rINST. Does not advance rPC. 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_INST() movzwl (rPC),rINST_FULL 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch the nth instruction word from rPC into rINST. Does not advance 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC, and _count is in words 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_INST_WORD(_count) movzwl _count*2(rPC),rINST_FULL 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch instruction word indexed (used for branching). 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Index is in instruction word units. 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_INST_INDEXED(_reg) movzwl (rPC,_reg,2),rINST_FULL 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Extract the opcode of the instruction in rINST 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define EXTRACT_OPCODE(_reg) movzx rOPCODE,_reg 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Advance rPC by instruction count 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define ADVANCE_PC(_count) leal 2*_count(rPC),rPC 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Advance rPC by branch offset in register 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define ADVANCE_PC_INDEXED(_reg) leal (rPC,_reg,2),rPC 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: assumes opcode previously fetched and in rINST, and 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * %eax is killable at this point. 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if 1 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.macro GOTO_NEXT 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For computed next version */ 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rOPCODE,%eax 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $6,%eax 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl rIBASE,%eax 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp *%eax 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#else 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For jump table version */ 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.macro GOTO_NEXT 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rOPCODE,%eax 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp *(rIBASE,%eax,4) 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get/set the 32-bit value from a Dalvik register. 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GET_VREG(_reg, _vreg) movl (rFP,_vreg,4),_reg 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SET_VREG(_reg, _vreg) movl _reg,(rFP,_vreg,4) 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GET_VREG_WORD(_reg, _vreg, _offset) movl 4*(_offset)(rFP,_vreg,4),_reg 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SET_VREG_WORD(_reg, _vreg, _offset) movl _reg,4*(_offset)(rFP,_vreg,4) 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is a #include, not a %include, because we want the C pre-processor 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to expand the macros into assembler assignment statements. 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "../common/asm-constants.h" 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmInstructionStart 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmAsmInstructionStart, %function 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionStart = .L_OP_NOP 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOP: /* 0x00 */ 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOP.S */ 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE: /* 0x01 */ 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $12,rINST_FULL # rINST_FULL<- B 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) # fp[A]<-fp[B] 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_FROM16: /* 0x02 */ 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */ 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%eax # eax <= AA 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw 2(rPC),rINST # rINST <= BBBB 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,rINST_FULL) # ecx<- fp[BBBB] 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%ecx,%eax) # fp[AA]<- ecx] 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_16: /* 0x03 */ 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_16.S */ 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE: /* 0x04 */ 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE.S */ 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide vA, vB */ 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx <- BA 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rinst_FULL<- B 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[B+0] 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- v[B+1] 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rINST_FULL,%ecx,1) # v[A+1]<- rINST_FULL 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[A+0]<- eax 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_FROM16: /* 0x05 */ 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE_FROM16.S */ 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/from16 vAA, vBBBB */ 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- AAAA 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,%ecx,0) # rINST_FULL<- v[BBBB+0] 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[BBBB+1] 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rINST_FULL,%eax,0) # v[AAAA+0]<- rINST_FULL 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,%eax,1) # v[AAAA+1]<- eax 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_16: /* 0x06 */ 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE_16.S */ 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/16 vAAAA, vBBBB */ 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,%ecx,0) # rINST_WORD<- v[BBBB+0] 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[BBBB+1] 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rINST_FULL,%eax,0) # v[AAAA+0]<- rINST_FULL 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,%eax,1) # v[AAAA+1]<- ecx 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT: /* 0x07 */ 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT.S */ 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $12,rINST_FULL # rINST_FULL<- B 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) # fp[A]<-fp[B] 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_FROM16: /* 0x08 */ 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_FROM16.S */ 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */ 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%eax # eax <= AA 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw 2(rPC),rINST # rINST <= BBBB 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,rINST_FULL) # ecx<- fp[BBBB] 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%ecx,%eax) # fp[AA]<- ecx] 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_16: /* 0x09 */ 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_16.S */ 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_16.S */ 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT: /* 0x0a */ 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */ 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) # eax<- rGLUE 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- AA 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_retval(%eax),%eax # eax<- glue->retval.l 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,%ecx) # fp[AA]<- retval.l 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_WIDE: /* 0x0b */ 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT_WIDE.S */ 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-result-wide vAA */ 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_retval(%ecx),%eax 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4+offGlue_retval(%ecx),%ecx 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0] <- eax 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,1) # v[AA+1] <- ecx 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_OBJECT: /* 0x0c */ 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT_OBJECT.S */ 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */ 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) # eax<- rGLUE 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- AA 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_retval(%eax),%eax # eax<- glue->retval.l 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,%ecx) # fp[AA]<- retval.l 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_EXCEPTION: /* 0x0d */ 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_EXCEPTION.S */ 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-exception vAA */ 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offThread_exception(%ecx),%eax # eax<- dvmGetException bypass 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) # fp[AA]<- exception object 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,offThread_exception(%ecx) # dvmClearException bypass 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_VOID: /* 0x0e */ 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_VOID.S */ 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN: /* 0x0f */ 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN.S */ 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.i <- AA 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_WIDE: /* 0x10 */ 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_WIDE.S */ 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 64-bit value. Copies the return value into the "glue" 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* return-wide vAA */ 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- v[AA+1] 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4+offGlue_retval(%ecx) 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_OBJECT: /* 0x11 */ 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_OBJECT.S */ 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN.S */ 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.i <- AA 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_4: /* 0x12 */ 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_4.S */ 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/4 vA, #+B */ 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsx rINST_HI,%eax # eax<-ssssssBx 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %eax,%ecx # ecx<- A 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_16: /* 0x13 */ 508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_16.S */ 509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/16 vAA, #+BBBB */ 510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssBBBB 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%eax # eax<- AA 512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) # vAA<- ssssBBBB 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST: /* 0x14 */ 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST.S */ 521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const vAA, #+BBBBbbbb */ 522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # grab all 32 bits at once 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- eax 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_HIGH16: /* 0x15 */ 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_HIGH16.S */ 533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/high16 vAA, #+BBBB0000 */ 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- 0000BBBB 535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,%eax # eax<- BBBB0000 539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- eax 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_16: /* 0x16 */ 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_16.S */ 546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/16 vAA, #+BBBB */ 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%eax # eax<- ssssBBBB 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # rPC:eax<- ssssssssssssBBBB 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) # store msw 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # store lsw 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_32: /* 0x17 */ 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_32.S */ 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/32 vAA, #+BBBBbbbb */ 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # eax<- BBBBbbbb 564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # rPC:eax<- ssssssssssssBBBB 568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) # store msw 569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # store lsw 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE: /* 0x18 */ 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE.S */ 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide vAA, #+HHHHhhhhBBBBbbbb */ 579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # eax<- lsw 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx <- AA 581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 6(rPC),rINST_FULL # rINST_FULL<- msw 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),%ecx # dst addr 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4(%ecx) 584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(5) 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(%ecx) 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(5) 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_HIGH16: /* 0x19 */ 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_HIGH16.S */ 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/high16 vAA, #+BBBB000000000000 */ 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- 0000BBBB 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,%eax # eax<- BBBB0000 599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,1) # v[AA+1]<- eax 600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[AA+0]<- eax 602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING: /* 0x1a */ 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_STRING.S */ 608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBB */ 610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings 615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResString[BBBB] 616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_STRING_resolve 620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- rResString[BBBB] 621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING_JUMBO: /* 0x1b */ 627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_STRING_JUMBO.S */ 628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBBBBBB */ 630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # eax<- BBBBBBBB 632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings 635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResString[BBBB] 636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_STRING_JUMBO_resolve 640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- rResString[BBBB] 641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 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_CLASS: /* 0x1c */ 647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_CLASS.S */ 648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/class vAA, Class@BBBB */ 650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- dvmDex->pResClasses 655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResClasses[BBBB] 656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_CLASS_resolve 660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- rResClasses[BBBB] 661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_ENTER: /* 0x1d */ 667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MONITOR_ENTER.S */ 668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Synchronize on an object. 670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-enter vAA */ 672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 67899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project EXPORT_PC() # need for precise GC, MONITOR_TRACKING 679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_MONITOR_ENTER_continue 680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_EXIT: /* 0x1e */ 685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MONITOR_EXIT.S */ 686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlock an object. 688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Exceptions that occur when unlocking a monitor need to appear as 690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if they happened at the following instruction. See the Dalvik 691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction spec. 692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-exit vAA */ 694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) 696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 699668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee je .LOP_MONITOR_EXIT_errNullObject # go if so 700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MONITOR_EXIT_continue 705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CHECK_CAST: /* 0x1f */ 709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CHECK_CAST.S */ 710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if a cast from one class to another is allowed. 712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* check-cast vAA, class@BBBB */ 714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- vAA (object) 717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # is oject null? 720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CHECK_CAST_okay # null obj, cast always succeeds 722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved class 723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # have we resolved this before? 725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CHECK_CAST_resolve # no, go do it now 726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolved: 727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl %eax,%ecx # same class (trivial success)? 728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_CHECK_CAST_fullcheck # no, do full check 729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_okay: 730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INSTANCE_OF: /* 0x20 */ 737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INSTANCE_OF.S */ 738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if an object reference is an instance of a class. 740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Most common situation is a non-null object, being compared against 742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an already-resolved class. 743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* instance-of vA, vB, class@CCCC */ 745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB (obj) 748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # object null? 750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_store # null obj, not instance, store it 753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rPC # rPC<- CCCC 754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,rPC,4),%ecx # ecx<- resolved class 756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- obj->clazz 757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # have we resolved this before? 758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_resolve # not resolved, do it now 759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolved: # eax<- obj->clazz, ecx<- resolved class 760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl %eax,%ecx # same class (trivial success)? 761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_trivial # yes, trivial finish 762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INSTANCE_OF_fullcheck # no, do full check 763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ARRAY_LENGTH: /* 0x21 */ 767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ARRAY_LENGTH.S */ 768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the length of an array. 770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) # ecx<- vB (object ref) 774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # is null? 776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_length(%ecx),%ecx 779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_INSTANCE: /* 0x22 */ 786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEW_INSTANCE.S */ 787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new instance of a class. 789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-instance vAA, class@BBBB */ 791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved class 798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # resolved? 800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_NEW_INSTANCE_resolve # no, go do it 801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolved: # on entry, ecx<- class 802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $CLASS_INITIALIZED,offClassObject_status(%ecx) 803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_NEW_INSTANCE_initialized 804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_NEW_INSTANCE_needinit 805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_ARRAY: /* 0x23 */ 809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEW_ARRAY.S */ 810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Allocate an array of objects, specified with the array class 812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and a count. 813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The verifier guarantees that this is an array class, so we don't 815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check for it here. 816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-array vA, vB, class@CCCC */ 818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- CCCC 822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved class 824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax 825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB (array length) 827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_errNegativeArraySize # bail 831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_ARRAY_finish # yes, fast path 833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_NEW_ARRAY_resolve # resolve now 834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY: /* 0x24 */ 838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */ 839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA or BA 848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%eax),%eax # eax<- pDvmDex->pResClasses 851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved class 853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_continue # yes, continue 856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # less frequent path, so we'll redo some work 857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- BBBB 860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FILLED_NEW_ARRAY_more 862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY_RANGE: /* 0x25 */ 866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY_RANGE.S */ 867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */ 868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA or BA 877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%eax),%eax # eax<- pDvmDex->pResClasses 880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved class 882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_RANGE_continue # yes, continue 885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # less frequent path, so we'll redo some work 886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- BBBB 889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FILLED_NEW_ARRAY_RANGE_more 891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILL_ARRAY_DATA: /* 0x26 */ 896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILL_ARRAY_DATA.S */ 897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* fill-array-data vAA, +BBBBBBBB */ 898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) 902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandleFillArrayData 907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # exception thrown? 910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_THROW: /* 0x27 */ 917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_THROW.S */ 918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception object in the current thread. 920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* throw vAA */ 922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 9238ba2708ea118381f2df5ca55b9bad2ae4c050504Andy McFadden EXPORT_PC() 924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- exception object 926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offThread_exception(%ecx) # thread->exception<- obj 930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO: /* 0x28 */ 935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO.S */ 936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 8-bit offset. 938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset, which we need to 940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * double to get a byte offset. 941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto +AA */ 943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl rINST_HI,rINST_FULL # ebx<- ssssssAA 944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # test for <0 945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_16: /* 0x29 */ 954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO_16.S */ 955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 16-bit offset. 957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset 959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/16 +AAAA */ 961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # rINST_FULL<- ssssAAAA 962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # test for <0 963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_32: /* 0x2a */ 972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO_32.S */ 973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 32-bit offset. 975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset. 977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlike most opcodes, this one is allowed to branch to itself, so 979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * our "backward branch" test must be "<=0" instead of "<0". 980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/32 AAAAAAAA */ 982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),rINST_FULL # rINST_FULL<- AAAAAAAA 983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,rINST_FULL # test for <= 0 984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle common_backwardBranch 985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_PACKED_SWITCH: /* 0x2b */ 993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */ 994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # ARG1<- vAA 1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # ARG0<- switchData 1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandlePackedSwitch 1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,rINST_FULL # set up word offset 1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle common_backwardBranch # check on special actions 1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(rINST_FULL) 1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPARSE_SWITCH: /* 0x2c */ 1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPARSE_SWITCH.S */ 1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */ 1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 1037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # ARG1<- vAA 1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # ARG0<- switchData 1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandleSparseSwitch 1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,rINST_FULL # set up word offset 1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle common_backwardBranch # check on special actions 1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(rINST_FULL) 1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_FLOAT: /* 0x2d */ 1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPL_FLOAT.S */ 1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPL_FLOAT_isNaN 1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPL_FLOAT_finish 1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPL_FLOAT_finish 1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_finish: 1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_FLOAT: /* 0x2e */ 1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_FLOAT.S */ 1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPG_FLOAT_isNaN 1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPG_FLOAT_finish 1109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPG_FLOAT_finish 1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_finish: 1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_DOUBLE: /* 0x2f */ 1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPL_DOUBLE.S */ 1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPL_DOUBLE_isNaN 1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPL_DOUBLE_finish 1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPL_DOUBLE_finish 1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_finish: 1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_DOUBLE: /* 0x30 */ 1154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPG_DOUBLE_isNaN 1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPG_DOUBLE_finish 1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPG_DOUBLE_finish 1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_finish: 1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 1179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMP_LONG: /* 0x31 */ 1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMP_LONG.S */ 1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two 64-bit values. Puts 0, 1, or -1 into the destination 1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * register based on the results of the comparison. 1189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* cmp-long vAA, vBB, vCC */ 1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 1193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),rPC # rPC<- CC 1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,1) # eax<- v[BB+1] 1195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,0) # ecx<- v[BB+0] 1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl 4(rFP,rPC,4),%eax 1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl .LOP_CMP_LONG_smaller 1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg .LOP_CMP_LONG_bigger 1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub (rFP,rPC,4),%ecx 1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ja .LOP_CMP_LONG_bigger 1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMP_LONG_smaller 1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMP_LONG_finish 1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQ: /* 0x32 */ 1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_EQ.S */ 1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NE: /* 0x33 */ 1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_NE.S */ 1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 1258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LT: /* 0x34 */ 1271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LT.S */ 1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jge 1f 1289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GE: /* 0x35 */ 1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GE.S */ 1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl 1f 1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GT: /* 0x36 */ 1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GT.S */ 1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle 1f 1351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LE: /* 0x37 */ 1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LE.S */ 1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg 1f 1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQZ: /* 0x38 */ 1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_EQZ.S */ 1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NEZ: /* 0x39 */ 1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_NEZ.S */ 1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LTZ: /* 0x3a */ 1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LTZ.S */ 1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jge 1f 1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GEZ: /* 0x3b */ 1476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GEZ.S */ 1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl 1f 1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GTZ: /* 0x3c */ 1503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GTZ.S */ 1504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle 1f 1518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LEZ: /* 0x3d */ 1530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LEZ.S */ 1531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg 1f 1545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3E: /* 0x3e */ 1557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_3E.S */ 1558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3F: /* 0x3f */ 1565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_3F.S */ 1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_40: /* 0x40 */ 1573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_40.S */ 1574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_41: /* 0x41 */ 1581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_41.S */ 1582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_42: /* 0x42 */ 1589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_42.S */ 1590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_43: /* 0x43 */ 1597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_43.S */ 1598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET: /* 0x44 */ 1605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_contents(%eax,%ecx,4),%eax 1622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_WIDE: /* 0x45 */ 1631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_WIDE.S */ 1632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 64 bits. vAA <- vBB[vCC]. 1634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_AGET_WIDE_finish # index < length, OK 1646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errArrayIndex # index >= length, bail 1647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_OBJECT: /* 0x46 */ 1651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_OBJECT.S */ 1652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_contents(%eax,%ecx,4),%eax 1669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BOOLEAN: /* 0x47 */ 1679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_BOOLEAN.S */ 1680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl offArrayObject_contents(%eax,%ecx,1),%eax 1697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BYTE: /* 0x48 */ 1707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_BYTE.S */ 1708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl offArrayObject_contents(%eax,%ecx,1),%eax 1725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_CHAR: /* 0x49 */ 1735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_CHAR.S */ 1736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offArrayObject_contents(%eax,%ecx,2),%eax 1753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_SHORT: /* 0x4a */ 1763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_SHORT.S */ 1764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl offArrayObject_contents(%eax,%ecx,2),%eax 1781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT: /* 0x4b */ 1791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,4),%eax 1808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,(%eax) 1811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_WIDE: /* 0x4c */ 1817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_WIDE.S */ 1818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 64 bits. vBB[vCC]<-vAA. 1820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_APUT_WIDE_finish # index < length, OK 1832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errArrayIndex # index >= length, bail 1833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_OBJECT: /* 0x4d */ 1837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_OBJECT.S */ 1838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- vAA 1850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_APUT_OBJECT_continue 1854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errArrayIndex # index >= length, bail 1855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BOOLEAN: /* 0x4e */ 1859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_BOOLEAN.S */ 1860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,1),%eax 1877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb %cl,(%eax) 1880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BYTE: /* 0x4f */ 1887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_BYTE.S */ 1888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,1),%eax 1905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb %cl,(%eax) 1908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_CHAR: /* 0x50 */ 1915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_CHAR.S */ 1916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,2),%eax 1933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %cx,(%eax) 1936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_SHORT: /* 0x51 */ 1943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_SHORT.S */ 1944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,2),%eax 1961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %cx,(%eax) 1964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET: /* 0x52 */ 1971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 1972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 1974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 1976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 1978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 1979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 1980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 1981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 1982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 1983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 1984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 1985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 1986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 1987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 1988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 1989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 1990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_finish # no, already resolved 1991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 1992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 1993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_resolve 1994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE: /* 0x53 */ 1998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_WIDE.S */ 1999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit instance field get. 2001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_WIDE_finish # no, already resolved 2017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_WIDE_resolve 2020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT: /* 0x54 */ 2024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_OBJECT.S */ 2025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_OBJECT_finish # no, already resolved 2045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_OBJECT_resolve 2048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BOOLEAN: /* 0x55 */ 2053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_BOOLEAN.S */ 2054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BOOLEAN_finish # no, already resolved 2074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_BOOLEAN_resolve 2077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BYTE: /* 0x56 */ 2082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_BYTE.S */ 2083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BYTE_finish # no, already resolved 2103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_BYTE_resolve 2106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_CHAR: /* 0x57 */ 2111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_CHAR.S */ 2112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_CHAR_finish # no, already resolved 2132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_CHAR_resolve 2135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_SHORT: /* 0x58 */ 2140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_SHORT.S */ 2141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_SHORT_finish # no, already resolved 2161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_SHORT_resolve 2164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT: /* 0x59 */ 2169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_finish # no, already resolved 2190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_resolve 2193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE: /* 0x5a */ 2197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_WIDE.S */ 2198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit instance field put. 2200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_WIDE_finish # no, already resolved 2216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_WIDE_resolve 2219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT: /* 0x5b */ 2223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_OBJECT.S */ 2224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 22253d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Object field put. 2226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 22273d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iput-object 2228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_OBJECT_finish # no, already resolved 2243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_OBJECT_resolve 2246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BOOLEAN: /* 0x5c */ 2250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_BOOLEAN.S */ 2251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_BOOLEAN_finish # no, already resolved 2272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_BOOLEAN_resolve 2275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BYTE: /* 0x5d */ 2280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_BYTE.S */ 2281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_BYTE_finish # no, already resolved 2302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_BYTE_resolve 2305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_CHAR: /* 0x5e */ 2310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_CHAR.S */ 2311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_CHAR_finish # no, already resolved 2332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_CHAR_resolve 2335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_SHORT: /* 0x5f */ 2340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_SHORT.S */ 2341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_SHORT_finish # no, already resolved 2362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_SHORT_resolve 2365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET: /* 0x60 */ 2370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_resolve # if not, make it so 2384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_finish: # field ptr in eax 2385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_WIDE: /* 0x61 */ 2395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_WIDE.S */ 2396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit SGET handler. 2398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* sget-wide vAA, field@BBBB */ 2401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_WIDE_resolve # if not, make it so 2408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_finish: # field ptr in eax 2409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%ecx # ecx<- lsw 2410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4+offStaticField_value(%eax),%eax # eax<- msw 2411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 2412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) 2413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) 2414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_OBJECT: /* 0x62 */ 2421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_OBJECT.S */ 2422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_OBJECT_resolve # if not, make it so 2436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_finish: # field ptr in eax 2437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BOOLEAN: /* 0x63 */ 2448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_BOOLEAN.S */ 2449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_BOOLEAN_resolve # if not, make it so 2463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_finish: # field ptr in eax 2464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BYTE: /* 0x64 */ 2475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_BYTE.S */ 2476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_BYTE_resolve # if not, make it so 2490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_finish: # field ptr in eax 2491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_CHAR: /* 0x65 */ 2502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_CHAR.S */ 2503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_CHAR_resolve # if not, make it so 2517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_finish: # field ptr in eax 2518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_SHORT: /* 0x66 */ 2529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_SHORT.S */ 2530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_SHORT_resolve # if not, make it so 2544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_finish: # field ptr in eax 2545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT: /* 0x67 */ 2556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 25603d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 2561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_resolve # if not, make it so 2570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_finish: # field ptr in eax 2571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_WIDE: /* 0x68 */ 2581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_WIDE.S */ 2582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_WIDE_resolve # if not, make it so 2595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_WIDE_finish: # field ptr in eax 2596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,%ecx,0) # rINST_FULL<- lsw 2598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- msw 2599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,offStaticField_value(%eax) 2600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+offStaticField_value(%eax) 2603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_OBJECT: /* 0x69 */ 2608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_OBJECT.S */ 2609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 26103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * SPUT object handler. 2611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 26173d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField 2618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_OBJECT_resolve # if not, make it so 2620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_OBJECT_finish: # field ptr in eax 2621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 26233d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_SPUT_OBJECT_continue 2624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BOOLEAN: /* 0x6a */ 2628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_BOOLEAN.S */ 2629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 26333d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 2634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_BOOLEAN_resolve # if not, make it so 2643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_finish: # field ptr in eax 2644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BYTE: /* 0x6b */ 2655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_BYTE.S */ 2656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 26603d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 2661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_BYTE_resolve # if not, make it so 2670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_finish: # field ptr in eax 2671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_CHAR: /* 0x6c */ 2682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_CHAR.S */ 2683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 26873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 2688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_CHAR_resolve # if not, make it so 2697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_finish: # field ptr in eax 2698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_SHORT: /* 0x6d */ 2709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_SHORT.S */ 2710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 27143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 2715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_SHORT_resolve # if not, make it so 2724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_finish: # field ptr in eax 2725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL: /* 0x6e */ 2736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */ 2737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 2740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 2742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 2746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 2747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 2748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%eax),%eax # eax<- pDvmDex->pResMethods 2750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved baseMethod 2751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 2752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_continue # yes, continue 2753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 2754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 2755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 2756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_VIRTUAL_more 2758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER: /* 0x6f */ 2762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */ 2763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 2765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 2767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rINST_FULL) 2771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(rINST_FULL),%ecx # ecx<- pDvmDex 2773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved baseMethod 2776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rINST_FULL),%eax # eax<- method 2777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rINST_FULL # rINST_FULL<- GFED or CCCC 2778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 2779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,rINST_FULL # rINST_FULL<- D (or stays CCCC) 2780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- "this" ptr 2782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # null "this"? 2783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, throw 2784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 2785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 2786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_continue # yes - go on 2787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_SUPER_resolve 2788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT: /* 0x70 */ 2792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */ 2793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 2795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 2797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 2798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 2799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 2800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/range 2802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 2808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rPC # rPC<- GFED or CCCC 2812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 2813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 2814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,rPC # rPC<- D (or stays CCCC) 2815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 2817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rPC) # ecx<- "this" ptr 2818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INVOKE_DIRECT_resolve # not resolved, do it now 2819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_finish: 2820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 2821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null "this"? 2822c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange # no, continue on 2823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 2824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC: /* 0x71 */ 2828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */ 2829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 2831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 2833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 2839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 2842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 2843c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange 2844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 2846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 2847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 2848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 2849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 2850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_STATIC_continue 2851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE: /* 0x72 */ 2855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */ 2856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 2858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 2860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 2864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 2866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 2867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 2869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null this? 2871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, fail 2872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax# eax<- thisPtr->clazz 2873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- class 2874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- methodClassDex 2875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- method 2876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) # arg3<- dex 2877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG2(%esp) # arg2<- method 2879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 2880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_INTERFACE_continue 2882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_73: /* 0x73 */ 2886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_73.S */ 2887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 2888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 2889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_RANGE: /* 0x74 */ 2894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_RANGE.S */ 2895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */ 2896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 2899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 2901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 2905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 2906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 2907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%eax),%eax # eax<- pDvmDex->pResMethods 2909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved baseMethod 2910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 2911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_RANGE_continue # yes, continue 2912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 2913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 2914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 2915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_VIRTUAL_RANGE_more 2917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_RANGE: /* 0x75 */ 2922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_RANGE.S */ 2923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */ 2924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 2926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 2928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rINST_FULL) 2932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(rINST_FULL),%ecx # ecx<- pDvmDex 2934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved baseMethod 2937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rINST_FULL),%eax # eax<- method 2938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rINST_FULL # rINST_FULL<- GFED or CCCC 2939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 2940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,rINST_FULL # rINST_FULL<- D (or stays CCCC) 2941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- "this" ptr 2943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # null "this"? 2944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, throw 2945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 2946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 2947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_RANGE_continue # yes - go on 2948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_SUPER_RANGE_resolve 2949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_RANGE: /* 0x76 */ 2954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT_RANGE.S */ 2955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */ 2956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 2958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 2960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 2961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 2962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 2963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/range 2965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 2971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rPC # rPC<- GFED or CCCC 2975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 2976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 2977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,rPC # rPC<- D (or stays CCCC) 2978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 2980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rPC) # ecx<- "this" ptr 2981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INVOKE_DIRECT_RANGE_resolve # not resolved, do it now 2982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_finish: 2983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 2984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null "this"? 2985c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange # no, continue on 2986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 2987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC_RANGE: /* 0x77 */ 2992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC_RANGE.S */ 2993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */ 2994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 2996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 2998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 3002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 3004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 3005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 3007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 3008c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange 3009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 3010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 3011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 3012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 3013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 3015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_STATIC_RANGE_continue 3016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE_RANGE: /* 0x78 */ 3021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE_RANGE.S */ 3022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */ 3023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 3025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 3027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 3031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 3032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 3034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 3036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 3037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null this? 3038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, fail 3039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax# eax<- thisPtr->clazz 3040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- class 3041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- methodClassDex 3042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- method 3043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) # arg3<- dex 3044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG2(%esp) # arg2<- method 3046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_INTERFACE_RANGE_continue 3049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_79: /* 0x79 */ 3054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_79.S */ 3055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 3056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 3057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_7A: /* 0x7a */ 3062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_7A.S */ 3063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 3064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 3065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_INT: /* 0x7b */ 3070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_INT.S */ 3071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 30837365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 30847365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %eax 3086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_INT: /* 0x7c */ 3093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOT_INT.S */ 3094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 31067365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 31077365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %eax 3109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_LONG: /* 0x7d */ 3116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_LONG.S */ 3117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 3119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 3120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # ecx<- BA 3121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 3122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 3123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[B+1] 3124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %eax 3125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $0,%ecx 3126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %ecx 3127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[A+0]<- eax 3128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,1) # v[A+1]<- ecx 3129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_LONG: /* 0x7e */ 3136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOT_LONG.S */ 3137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 3139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 3140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # ecx<- BA 3141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 3142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 3143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[B+1] 3144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %eax 3145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %ecx 3146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[A+0]<- eax 3147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,1) # v[A+1]<- ecx 3148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_FLOAT: /* 0x7f */ 3155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_FLOAT.S */ 3156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fchs 3168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 3169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_DOUBLE: /* 0x80 */ 3175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_DOUBLE.S */ 3176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fchs 3188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 3189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_LONG: /* 0x81 */ 3195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_LONG.S */ 3196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* int to long vA, vB */ 3197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- +A 3198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # will step on edx later 3201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # edx:eax<- sssssssBBBBBBBB 3203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[A+1]<- edx/rPC 3204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[A+0]<- %eax 3206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_FLOAT: /* 0x82 */ 3213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_FLOAT.S */ 3214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fildl (rFP,rINST_FULL,4) # %st0<- vB 3222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 32257365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 3227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_DOUBLE: /* 0x83 */ 3233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_DOUBLE.S */ 3234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fildl (rFP,rINST_FULL,4) # %st0<- vB 3242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 32457365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 3247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_INT: /* 0x84 */ 3253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_INT.S */ 3254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* we ignore the high word, making this equivalent to a 32-bit reg move */ 3255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 3256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 3257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 3258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 3259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 3260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $12,rINST_FULL # rINST_FULL<- B 3261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 3262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) # fp[A]<-fp[B] 3265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_FLOAT: /* 0x85 */ 3271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_FLOAT.S */ 3272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fildll (rFP,rINST_FULL,4) # %st0<- vB 3280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 32837365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 3285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_DOUBLE: /* 0x86 */ 3291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_DOUBLE.S */ 3292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fildll (rFP,rINST_FULL,4) # %st0<- vB 3300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 33037365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 3305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_INT: /* 0x87 */ 3311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_INT.S */ 3312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_INT_continue 3343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_LONG: /* 0x88 */ 3348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_LONG.S */ 3349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_continue 3380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_DOUBLE: /* 0x89 */ 3385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_DOUBLE.S */ 3386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 33977365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 3399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_INT: /* 0x8a */ 3405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_INT.S */ 3406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_continue 3437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_LONG: /* 0x8b */ 3442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_LONG.S */ 3443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_continue 3474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_FLOAT: /* 0x8c */ 3479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_FLOAT.S */ 3480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 34917365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 3493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_BYTE: /* 0x8d */ 3499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_BYTE.S */ 3500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 35127365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 35137365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl %al,%eax 3515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_CHAR: /* 0x8e */ 3522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_CHAR.S */ 3523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 35357365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 35367365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl %ax,%eax 3538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 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_SHORT: /* 0x8f */ 3545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_SHORT.S */ 3546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/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 eax". 3550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 35587365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 35597365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl %ax,%eax 3561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT: /* 0x90 */ 3568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT.S */ 3569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT: /* 0x91 */ 3594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_INT.S */ 3595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT: /* 0x92 */ 3620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT.S */ 3621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary multiplication. 3623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul vAA, vBB, vCC */ 3625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP,%ecx,4),%eax # trashes rPC/edx 3630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT: /* 0x93 */ 3640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT.S */ 3641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv.S */ 3642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 3645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 3646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 3654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 3655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 3656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_continue_div 3657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 3658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_continue_div 3659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 3660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_finish_div 3661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT: /* 0x94 */ 3667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT.S */ 3668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv.S */ 3669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 3672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 3673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 3681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 3682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 3683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_continue_div 3684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 3685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_continue_div 3686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 3687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_finish_div 3688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT: /* 0x95 */ 3694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT.S */ 3695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT: /* 0x96 */ 3720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT.S */ 3721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT: /* 0x97 */ 3746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT.S */ 3747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 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_SHL_INT: /* 0x98 */ 3772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT.S */ 3773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 3774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 3776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 3777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: addl %ecx,%eax 3784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # tmp<- AA 3785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT: /* 0x99 */ 3794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT.S */ 3795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 3796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 3798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 3799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: addl %ecx,%eax 3806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # tmp<- AA 3807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT: /* 0x9a */ 3816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT.S */ 3817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 3818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 3820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 3821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: addl %ecx,%eax 3828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # tmp<- AA 3829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG: /* 0x9b */ 3838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_LONG.S */ 3839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 3840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 3842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 3849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 3850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 3851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 3852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 3853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 3854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 3856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG: /* 0x9c */ 3864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_LONG.S */ 3865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 3866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 3868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 3875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 3876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 3877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 3878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 3879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 3880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 3882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG: /* 0x9d */ 3890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_LONG.S */ 3891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply. 3893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We could definately use more free registers for 3895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this code. We must spill rPC (edx) because it 3896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is used by imul. We'll also spill rINST (ebx), 3897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * giving us eax, ebc, ecx and edx as computational 3898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * temps. On top of that, we'll spill rIBASE (edi) 3899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for use as the vB pointer and rFP (esi) for use 3900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as the vC pointer. Yuck. 3901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long vAA, vBB, vCC */ 3903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- B 3904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- C 3905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) 3907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) 3908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rINST_FULL) 3909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%eax,4),rIBASE # rIBASE<- &v[B] 3910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),rFP # rFP<- &v[C] 3911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(rIBASE),%ecx # ecx<- Bmsw 3912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP),%ecx # ecx<- (Bmsw*Clsw) 3913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(rFP),%eax # eax<- Cmsw 3914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rIBASE),%eax # eax<- (Cmsw*Blsw) 3915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %eax,%ecx # ecx<- (Bmsw*Clsw)+(Cmsw*Blsw) 3916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (rFP),%eax # eax<- Clsw 3917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mull (rIBASE) # eax<- (Clsw*Alsw) 3918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rINST_FULL) 3919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 3920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MUL_LONG_continue 3921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG: /* 0x9e */ 3925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG.S */ 3926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div vAA, vBB, vCC */ 3927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 3928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 3929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 3931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 3932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG2(%esp) 3933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 3934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_check_zero 3935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 3936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_check_neg1 3937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_notSpecial: 3938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 3939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 3940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_notSpecial1: 3941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 3942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) 3943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 3944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_continue 3945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG: /* 0x9f */ 3949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_LONG.S */ 3950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG.S */ 3951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div vAA, vBB, vCC */ 3952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 3953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 3954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 3956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 3957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG2(%esp) 3958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 3959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_check_zero 3960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 3961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_check_neg1 3962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_notSpecial: 3963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 3964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 3965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_notSpecial1: 3966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 3967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) 3968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 3969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_continue 3970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG: /* 0xa0 */ 3975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_LONG.S */ 3976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 3977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 3979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 3986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 3987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 3988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 3989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 3990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 3991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 3993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 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_OR_LONG: /* 0xa1 */ 4001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_LONG.S */ 4002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 4012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 4013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 4014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 4016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 4017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 4019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG: /* 0xa2 */ 4027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_LONG.S */ 4028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 4038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 4039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 4040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 4042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 4043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 4045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG: /* 0xa3 */ 4053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_LONG.S */ 4054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long vAA, vBB, vCC */ 4063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # spill edx 4069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,%eax,1) # ecx<- v[BB+1] 4070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,%ecx) # ecx<- vCC 4071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,0) # eax<- v[BB+0] 4072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shldl %eax,%edx 4073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax 4074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edx 4077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 4078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 4080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[AA+1]<- %edx 4081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHL_LONG_finish 4084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG: /* 0xa4 */ 4088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_LONG.S */ 4089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long vAA, vBB, vCC */ 4098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # spill edx 4104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,%eax,1) # edx<- v[BB+1] 4105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,%ecx) # ecx<- vCC 4106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,0) # eax<- v[BB+0] 4107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%edx 4109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $31,%edx 4113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 4115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[AA+1]<- edx 4116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHR_LONG_finish 4119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG: /* 0xa5 */ 4123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_LONG.S */ 4124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long vAA, vBB, vCC */ 4133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # spill edx 4139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,%eax,1) # edx<- v[BB+1] 4140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,%ecx) # ecx<- vCC 4141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,0) # eax<- v[BB+0] 4142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%edx 4144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %edx,%edx 4148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 4150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[BB+1]<- edx 4151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_USHR_LONG_finish 4153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT: /* 0xa6 */ 4157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_FLOAT.S */ 4158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fadds (rFP,%ecx,4) # ex: faddp 4169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT: /* 0xa7 */ 4179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_FLOAT.S */ 4180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fsubs (rFP,%ecx,4) # ex: faddp 4191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT: /* 0xa8 */ 4201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_FLOAT.S */ 4202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fmuls (rFP,%ecx,4) # ex: faddp 4213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT: /* 0xa9 */ 4223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_FLOAT.S */ 4224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fdivs (rFP,%ecx,4) # ex: faddp 4235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT: /* 0xaa */ 4245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_FLOAT.S */ 4246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float vAA, vBB, vCC */ 4247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vCC to fp stack 4250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 4254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 4255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 4256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 4257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 4258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 4259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE: /* 0xab */ 4266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_DOUBLE.S */ 4267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project faddl (rFP,%ecx,4) # ex: faddp 4278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE: /* 0xac */ 4288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_DOUBLE.S */ 4289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fsubl (rFP,%ecx,4) # ex: faddp 4300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE: /* 0xad */ 4310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_DOUBLE.S */ 4311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fmull (rFP,%ecx,4) # ex: faddp 4322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE: /* 0xae */ 4332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_DOUBLE.S */ 4333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fdivl (rFP,%ecx,4) # ex: faddp 4344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE: /* 0xaf */ 4354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_DOUBLE.S */ 4355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float vAA, vBB, vCC */ 4356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vCC to fp stack 4359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 4363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 4364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 4365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 4366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 4367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 4368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_2ADDR: /* 0xb0 */ 4375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_2ADDR.S */ 4376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT_2ADDR: /* 0xb1 */ 4405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_INT_2ADDR.S */ 4406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_2ADDR: /* 0xb2 */ 4435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_2ADDR.S */ 4436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul vA, vB */ 4437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP,%ecx,4),%eax 4443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 4445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_2ADDR: /* 0xb3 */ 4452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_2ADDR.S */ 4453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv2addr.S */ 4454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 4456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 4457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/2addr vA, vB */ 4459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vBB 4465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 4467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 4468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 4469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_2ADDR_continue_div2addr 4470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 4471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_2ADDR_continue_div2addr 4472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 4473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_2ADDR_finish_div2addr 4474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_2ADDR: /* 0xb4 */ 4480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_2ADDR.S */ 4481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv2addr.S */ 4482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 4484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 4485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/2addr vA, vB */ 4487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vBB 4493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 4495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 4496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 4497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_2ADDR_continue_div2addr 4498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 4499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_2ADDR_continue_div2addr 4500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 4501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_2ADDR_finish_div2addr 4502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_2ADDR: /* 0xb5 */ 4508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_2ADDR.S */ 4509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_2ADDR: /* 0xb6 */ 4538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_2ADDR.S */ 4539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_2ADDR: /* 0xb7 */ 4568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_2ADDR.S */ 4569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_2ADDR: /* 0xb8 */ 4598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT_2ADDR.S */ 4599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 4610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: sarl %cl,%eax 4611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 4612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_2ADDR: /* 0xb9 */ 4620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT_2ADDR.S */ 4621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 4632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: sarl %cl,%eax 4633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 4634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_2ADDR: /* 0xba */ 4642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT_2ADDR.S */ 4643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 4654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: sarl %cl,%eax 4655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 4656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG_2ADDR: /* 0xbb */ 4664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_LONG_2ADDR.S */ 4665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG_2ADDR: /* 0xbc */ 4686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_LONG_2ADDR.S */ 4687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG_2ADDR: /* 0xbd */ 4708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_LONG_2ADDR.S */ 4709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply, 2-addr version 4711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We could definately use more free registers for 4713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this code. We must spill rPC (edx) because it 4714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is used by imul. We'll also spill rINST (ebx), 4715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * giving us eax, ebc, ecx and edx as computational 4716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * temps. On top of that, we'll spill rIBASE (edi) 4717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for use as the vA pointer and rFP (esi) for use 4718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as the vB pointer. Yuck. 4719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long/2addr vA, vB */ 4721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 4722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 4723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) 4726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) 4727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%eax,4),rIBASE # rIBASE<- &v[A] 4728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,rINST_FULL,4),rFP # rFP<- &v[B] 4729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(rIBASE),%ecx # ecx<- Amsw 4730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP),%ecx # ecx<- (Amsw*Blsw) 4731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(rFP),%eax # eax<- Bmsw 4732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rIBASE),%eax # eax<- (Bmsw*Alsw) 4733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %eax,%ecx # ecx<- (Amsw*Blsw)+(Bmsw*Alsw) 4734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (rFP),%eax # eax<- Blsw 4735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mull (rIBASE) # eax<- (Blsw*Alsw) 4736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MUL_LONG_2ADDR_continue 4737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG_2ADDR: /* 0xbe */ 4741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */ 4742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/2addr vA, vB */ 4743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax 4744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,%eax # eax<- B 4745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 4746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 4749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 4750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG2(%esp) 4751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 4752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_2ADDR_check_zero 4753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 4754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_2ADDR_check_neg1 4755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial: 4756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 4757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 4758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial1: 4759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_2ADDR_continue 4760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG_2ADDR: /* 0xbf */ 4764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_LONG_2ADDR.S */ 4765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */ 4766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/2addr vA, vB */ 4767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax 4768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,%eax # eax<- B 4769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 4770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 4773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 4774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG2(%esp) 4775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 4776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_2ADDR_check_zero 4777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 4778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_2ADDR_check_neg1 4779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial: 4780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 4781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 4782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial1: 4783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_2ADDR_continue 4784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG_2ADDR: /* 0xc0 */ 4789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_LONG_2ADDR.S */ 4790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG_2ADDR: /* 0xc1 */ 4811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_LONG_2ADDR.S */ 4812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG_2ADDR: /* 0xc2 */ 4833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_LONG_2ADDR.S */ 4834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG_2ADDR: /* 0xc3 */ 4855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_LONG_2ADDR.S */ 4856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 4858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 4859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 4861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_HI<- BA 4866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 4868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,rINST_FULL,1) # edx<- v[AA+1] 4871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- vBB 4872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shldl %eax,%edx 4873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax 4874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edx 4877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 4878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,rINST_FULL,1) # v[AA+1]<- edx 4880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHL_LONG_2ADDR_finish 4882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG_2ADDR: /* 0xc4 */ 4886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_LONG_2ADDR.S */ 4887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 4889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 4890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 4892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_HI<- BA 4897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 4899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,rINST_FULL,1) # edx<- v[AA+1] 4902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- vBB 4903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%edx 4905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $31,%edx 4909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,rINST_FULL,1) # v[AA+1]<- edx 4911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHR_LONG_2ADDR_finish 4913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG_2ADDR: /* 0xc5 */ 4917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_LONG_2ADDR.S */ 4918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 4920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 4921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 4923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_HI<- BA 4928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 4930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,rINST_FULL,1) # edx<- v[AA+1] 4933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- vBB 4934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%edx 4936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %edx,%edx 4940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,rINST_FULL,1) # v[AA+1]<- edx 4942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_USHR_LONG_2ADDR_finish 4944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT_2ADDR: /* 0xc6 */ 4948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_FLOAT_2ADDR.S */ 4949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 4950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 4960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fadds (rFP,rINST_FULL,4) # ex: faddp 4962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 4965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT_2ADDR: /* 0xc7 */ 4971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_FLOAT_2ADDR.S */ 4972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 4973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 4983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fsubs (rFP,rINST_FULL,4) # ex: faddp 4985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 4988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT_2ADDR: /* 0xc8 */ 4994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_FLOAT_2ADDR.S */ 4995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 4996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 5006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fmuls (rFP,rINST_FULL,4) # ex: faddp 5008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 5011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT_2ADDR: /* 0xc9 */ 5017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_FLOAT_2ADDR.S */ 5018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 5029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fdivs (rFP,rINST_FULL,4) # ex: faddp 5031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 5034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT_2ADDR: /* 0xca */ 5040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_FLOAT_2ADDR.S */ 5041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float/2addr vA, vB */ 5042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # vBB to fp stack 5045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 5047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 5049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 5050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 5051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 5052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 5053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 5054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 5056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE_2ADDR: /* 0xcb */ 5061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_DOUBLE_2ADDR.S */ 5062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project faddl (rFP,rINST_FULL,4) # ex: faddp 5075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE_2ADDR: /* 0xcc */ 5084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_DOUBLE_2ADDR.S */ 5085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fsubl (rFP,rINST_FULL,4) # ex: faddp 5098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE_2ADDR: /* 0xcd */ 5107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_DOUBLE_2ADDR.S */ 5108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fmull (rFP,rINST_FULL,4) # ex: faddp 5121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE_2ADDR: /* 0xce */ 5130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_DOUBLE_2ADDR.S */ 5131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fdivl (rFP,rINST_FULL,4) # ex: faddp 5144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE_2ADDR: /* 0xcf */ 5153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_DOUBLE_2ADDR.S */ 5154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float/2addr vA, vB */ 5155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # vBB to fp stack 5158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 5162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 5163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 5164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 5165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 5166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 5167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT16: /* 0xd0 */ 5174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_LIT16.S */ 5175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %ecx,%eax # for example: addl %ecx, %eax 5193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT: /* 0xd1 */ 5202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RSUB_INT.S */ 5203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,%ecx # for example: addl %ecx, %eax 5221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,rINST_FULL) 5222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT16: /* 0xd2 */ 5230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_LIT16.S */ 5231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul/lit16 vA, vB, #+CCCC */ 5232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need A in rINST_FULL, ssssCCCC in ecx, vB in eax */ 5233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull %ecx,%eax # trashes rPC 5241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 5242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT16: /* 0xd3 */ 5250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_LIT16.S */ 5251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit16.S */ 5252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 5254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 5255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit16 vA, vB, #+CCCC */ 5257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need A in rINST_FULL, ssssCCCC in ecx, vB in eax */ 5258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT16_continue_div 5269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT16_continue_div 5271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 5272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_LIT16_finish_div 5273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT16: /* 0xd4 */ 5279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_LIT16.S */ 5280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit16.S */ 5281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 5283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 5284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit16 vA, vB, #+CCCC */ 5286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need A in rINST_FULL, ssssCCCC in ecx, vB in eax */ 5287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT16_continue_div 5298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT16_continue_div 5300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 5301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_LIT16_finish_div 5302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT16: /* 0xd5 */ 5308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_LIT16.S */ 5309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %ecx,%eax # for example: addl %ecx, %eax 5327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT16: /* 0xd6 */ 5336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_LIT16.S */ 5337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,%eax # for example: addl %ecx, %eax 5355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT16: /* 0xd7 */ 5364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_LIT16.S */ 5365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xor %ecx,%eax # for example: addl %ecx, %eax 5383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT8: /* 0xd8 */ 5392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_LIT8.S */ 5393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %ecx,%eax # ex: addl %ecx,%eax 5410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT_LIT8: /* 0xd9 */ 5419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RSUB_INT_LIT8.S */ 5420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,%ecx # ex: addl %ecx,%eax 5437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%ecx,rINST_FULL) 5438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT8: /* 0xda */ 5446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_LIT8.S */ 5447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul/lit8 vAA, vBB, #+CC */ 5448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull %ecx,%eax # trashes rPC 5454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 5455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT8: /* 0xdb */ 5463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_LIT8.S */ 5464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit8.S */ 5465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit div/rem "lit8" binary operation. Handles special case of 5467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op0=minint & op1=-1 5468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit8 vAA, vBB, #+CC */ 5470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT8_continue_div 5479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT8_continue_div 5481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 5482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_LIT8_finish_div 5483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT8: /* 0xdc */ 5489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_LIT8.S */ 5490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit8.S */ 5491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit div/rem "lit8" binary operation. Handles special case of 5493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op0=minint & op1=-1 5494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit8 vAA, vBB, #+CC */ 5496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT8_continue_div 5505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT8_continue_div 5507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 5508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_LIT8_finish_div 5509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT8: /* 0xdd */ 5515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_LIT8.S */ 5516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %ecx,%eax # ex: addl %ecx,%eax 5533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT8: /* 0xde */ 5542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_LIT8.S */ 5543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,%eax # ex: addl %ecx,%eax 5560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT8: /* 0xdf */ 5569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_LIT8.S */ 5570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xor %ecx,%eax # ex: addl %ecx,%eax 5587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_LIT8: /* 0xe0 */ 5596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT_LIT8.S */ 5597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: addl %ecx,%eax 5614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_LIT8: /* 0xe1 */ 5623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT_LIT8.S */ 5624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: addl %ecx,%eax 5641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_LIT8: /* 0xe2 */ 5650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT_LIT8.S */ 5651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: addl %ecx,%eax 5668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5676c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IGET_VOLATILE: /* 0xe3 */ 56773d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET_VOLATILE.S */ 56783d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET.S */ 56793d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 56803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit instance field get. 56813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 56823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 56833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 56843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vA, vB, field@CCCC */ 5685c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden GET_GLUE(%ecx) 56863d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL(rIBASE) # need another reg 56873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 56883d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 56893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzbl rINST_HI,%ecx # ecx<- BA 56903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee sarl $4,%ecx # ecx<- B 56913d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 56923d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 56933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee andb $0xf,rINST_LO # rINST_FULL<- A 56943d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 56953d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%eax,rIBASE,4),%eax # resolved entry 56963d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # is resolved entry null? 56973d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_IGET_VOLATILE_finish # no, already resolved 56983d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 56993d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(rIBASE) 57003d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IGET_VOLATILE_resolve 57013d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 57023d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5705c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IPUT_VOLATILE: /* 0xe4 */ 57063d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT_VOLATILE.S */ 57073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT.S */ 57083d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 57093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 57103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit instance field put. 57113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 57123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 57133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 57143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vA, vB, field@CCCC */ 5715c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden GET_GLUE(%ecx) 57163d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL(rIBASE) # need another reg 57173d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 57183d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 57193d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzbl rINST_HI,%ecx # ecx<- BA 57203d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee sarl $4,%ecx # ecx<- B 57213d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 57223d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 57233d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee andb $0xf,rINST_LO # rINST_FULL<- A 57243d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 57253d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%eax,rIBASE,4),%eax # resolved entry 57263d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # is resolved entry null? 57273d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_IPUT_VOLATILE_finish # no, already resolved 57283d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rIBASE,OUT_ARG1(%esp) 57293d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(rIBASE) 57303d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IPUT_VOLATILE_resolve 57313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 57323d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5735c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SGET_VOLATILE: /* 0xe5 */ 57363d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET_VOLATILE.S */ 57373d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET.S */ 57383d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 57393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit SGET handler. 57403d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 57413d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 57423d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 57433d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vAA, field@BBBB */ 5744c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden GET_GLUE(%ecx) 57453d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 57463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 57473d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 57483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 57493d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # resolved entry null? 57503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je .LOP_SGET_VOLATILE_resolve # if not, make it so 57513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SGET_VOLATILE_finish: # field ptr in eax 57523d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offStaticField_value(%eax),%eax 57533d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzbl rINST_HI,%ecx # ecx<- AA 57543d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee FETCH_INST_WORD(2) 57553d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee ADVANCE_PC(2) 57563d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SET_VREG(%eax,%ecx) 5757c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden GOTO_NEXT 57583d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 57593d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5762c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SPUT_VOLATILE: /* 0xe6 */ 57633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT_VOLATILE.S */ 57643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT.S */ 57653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 57663d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit SPUT handler. 57673d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 57683d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 57693d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 57703d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vAA, field@BBBB */ 5771c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden GET_GLUE(%ecx) 57723d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 57733d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 57743d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 57753d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 57763d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # resolved entry null? 57773d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je .LOP_SPUT_VOLATILE_resolve # if not, make it so 57783d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SPUT_VOLATILE_finish: # field ptr in eax 57793d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzbl rINST_HI,%ecx # ecx<- AA 57803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_VREG(%ecx,%ecx) 57813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee FETCH_INST_WORD(2) 57823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,offStaticField_value(%eax) 57833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee ADVANCE_PC(2) 5784c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden GOTO_NEXT 57853d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 57863d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5789c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IGET_OBJECT_VOLATILE: /* 0xe7 */ 57903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET_OBJECT_VOLATILE.S */ 57913d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET.S */ 57923d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 57933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit instance field get. 57943d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 57953d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 57963d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 57973d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vA, vB, field@CCCC */ 5798c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden GET_GLUE(%ecx) 57993d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL(rIBASE) # need another reg 58003d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 58013d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 58023d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzbl rINST_HI,%ecx # ecx<- BA 58033d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee sarl $4,%ecx # ecx<- B 58043d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 58053d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 58063d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee andb $0xf,rINST_LO # rINST_FULL<- A 58073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 58083d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%eax,rIBASE,4),%eax # resolved entry 58093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # is resolved entry null? 58103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_IGET_OBJECT_VOLATILE_finish # no, already resolved 58113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 58123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(rIBASE) 58133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IGET_OBJECT_VOLATILE_resolve 58143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 58153d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 58185387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_IGET_WIDE_VOLATILE: /* 0xe8 */ 58195387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 58205387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 58215387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_PC_TO_GLUE(%ecx) # only need to export these two 58225387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_FP_TO_GLUE(%ecx) # only need to export these two 58235387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 58245387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_IGET_WIDE_VOLATILE # do the real work 58255387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 58265387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_PC_FROM_GLUE(%ecx) # retrieve updated values 58275387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_FP_FROM_GLUE(%ecx) # retrieve updated values 58285387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden FETCH_INST() 58295387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 5830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 58325387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_IPUT_WIDE_VOLATILE: /* 0xe9 */ 58335387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 58345387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 58355387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_PC_TO_GLUE(%ecx) # only need to export these two 58365387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_FP_TO_GLUE(%ecx) # only need to export these two 58375387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 58385387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_IPUT_WIDE_VOLATILE # do the real work 58395387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 58405387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_PC_FROM_GLUE(%ecx) # retrieve updated values 58415387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_FP_FROM_GLUE(%ecx) # retrieve updated values 58425387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden FETCH_INST() 58435387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 5844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 58465387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_SGET_WIDE_VOLATILE: /* 0xea */ 58475387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 58485387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 58495387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_PC_TO_GLUE(%ecx) # only need to export these two 58505387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_FP_TO_GLUE(%ecx) # only need to export these two 58515387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 58525387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_SGET_WIDE_VOLATILE # do the real work 58535387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 58545387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_PC_FROM_GLUE(%ecx) # retrieve updated values 58555387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_FP_FROM_GLUE(%ecx) # retrieve updated values 58565387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden FETCH_INST() 58575387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 5858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 58605387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_SPUT_WIDE_VOLATILE: /* 0xeb */ 58615387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 58625387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 58635387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_PC_TO_GLUE(%ecx) # only need to export these two 58645387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_FP_TO_GLUE(%ecx) # only need to export these two 58655387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 58665387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_SPUT_WIDE_VOLATILE # do the real work 58675387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 58685387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_PC_FROM_GLUE(%ecx) # retrieve updated values 58695387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_FP_FROM_GLUE(%ecx) # retrieve updated values 58705387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden FETCH_INST() 58715387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 5872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 587496516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden.L_OP_BREAKPOINT: /* 0xec */ 587596516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden/* File: x86/OP_BREAKPOINT.S */ 5876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 58823a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden.L_OP_THROW_VERIFICATION_ERROR: /* 0xed */ 5883be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee/* File: x86/OP_THROW_VERIFICATION_ERROR.S */ 5884be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee /* 5885be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * Handle a throw-verification-error instruction. This throws an 5886be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * exception for an error discovered during verification. The 5887be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * exception is indicated by AA, with some detail provided by BBBB. 5888be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee */ 5889be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee /* op AA, ref@BBBB */ 5890b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden GET_GLUE(%ecx) 5891be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movzwl 2(rPC),%eax # eax<- BBBB 5892be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl offGlue_method(%ecx),%ecx # ecx<- glue->method 5893be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee EXPORT_PC() 5894be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 5895be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl %eax,OUT_ARG2(%esp) # arg2<- BBBB 5896be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl rINST_FULL,OUT_ARG1(%esp) # arg1<- AA 5897be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl %ecx,OUT_ARG0(%esp) # arg0<- method 5898be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee SPILL(rPC) 5899be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee call dvmThrowVerificationError # call(method, kind, ref) 5900be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee UNSPILL(rPC) 5901be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee jmp common_exceptionThrown # handle exception 5902be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee 5903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_EXECUTE_INLINE: /* 0xee */ 5906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_EXECUTE_INLINE.S */ 5907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Execute a "native inline" instruction. 5909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We will be calling through a function table: 5911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (*gDvmInlineOpsTable[opIndex].func)(arg0, arg1, arg2, arg3, pResult) 5913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* [opt] execute-inline vAA, {vC, vD, vE, vF}, inline@BBBB */ 5916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 5917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 5918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 5919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offGlue_retval(%ecx),%ecx # ecx<- & glue->retval 5920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG4(%esp) 5921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- arg count (0-4) 5922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call .LOP_EXECUTE_INLINE_continue # make call; will return after 5924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 5925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # successful? 5926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 5927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 5928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 5929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5933b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden.L_OP_EXECUTE_INLINE_RANGE: /* 0xef */ 5934b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden /* (stub) */ 5935b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden GET_GLUE(%ecx) 5936b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden SAVE_PC_TO_GLUE(%ecx) # only need to export these two 5937b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden SAVE_FP_TO_GLUE(%ecx) # only need to export these two 5938b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 5939b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden call dvmMterp_OP_EXECUTE_INLINE_RANGE # do the real work 5940b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden GET_GLUE(%ecx) 5941b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden LOAD_PC_FROM_GLUE(%ecx) # retrieve updated values 5942b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden LOAD_FP_FROM_GLUE(%ecx) # retrieve updated values 5943b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden FETCH_INST() 5944b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden GOTO_NEXT 5945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_EMPTY: /* 0xf0 */ 5948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT_EMPTY.S */ 5949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * invoke-direct-empty is a no-op in a "standard" interpreter. 5951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 5953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 5954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_F1: /* 0xf1 */ 5959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_F1.S */ 5960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_QUICK: /* 0xf2 */ 5967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */ 5968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-quick */ 5969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 5970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 5971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 5973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 5974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 5975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 5976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%eax 5977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 5978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # rINST_FULL<- A 5981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,%ecx) # fp[A]<- result 5982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE_QUICK: /* 0xf3 */ 5987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_WIDE_QUICK.S */ 5988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-wide-quick */ 5989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 5990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 5991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 5993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 5994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 5995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 5996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of 64-bit source 5997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax),%ecx # ecx<- lsw 5998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%eax),%eax # eax<- msw 5999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 6000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 6001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) # v[A+0]<- lsw 6002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[A+1]<- msw 6003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT_QUICK: /* 0xf4 */ 6010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_OBJECT_QUICK.S */ 6011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */ 6012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-quick */ 6013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 6015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 6017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 6018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 6019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%eax 6021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 6022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # rINST_FULL<- A 6025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,%ecx) # fp[A]<- result 6026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_QUICK: /* 0xf5 */ 6032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_QUICK.S */ 60333d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* For: iput-quick */ 6034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 6036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 6038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 6039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 6040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 6041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 6042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # is object null? 6043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) 6045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE_QUICK: /* 0xf6 */ 6052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_WIDE_QUICK.S */ 6053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iput-wide-quick */ 6054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 6056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 6058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 6059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # is object null? 6060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%ecx # ecx<- Address of 64-bit target 6062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 6063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 6064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- lsw 6065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- msw 6066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(%ecx) 6067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4(%ecx) 6068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT_QUICK: /* 0xf7 */ 6075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_OBJECT_QUICK.S */ 60763d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* For: iput-object-quick */ 6077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 6079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 6081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 6082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 6083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 6084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 60853d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %ecx,%ecx # is object null? 6086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) 60883d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%eax) 60893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IPUT_OBJECT_QUICK_finish 6090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK: /* 0xf8 */ 6094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */ 6095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 6097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 6099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 6103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 6106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vC ("this" ptr) 6108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yep, throw exception 6110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- thisPtr->clazz 6111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable 6112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # might throw later - get ready 6113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[BBBB] 6114c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 6115c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 6116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK_RANGE: /* 0xf9 */ 6119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK_RANGE.S */ 6120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */ 6121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 6123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 6125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 6129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 6132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vC ("this" ptr) 6134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yep, throw exception 6136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- thisPtr->clazz 6137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable 6138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # might throw later - get ready 6139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[BBBB] 6140c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 6141c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 6142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK: /* 0xfa */ 6146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */ 6147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 6149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 6151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 6156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 6157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- D (or stays CCCC) 6159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 6162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super 6163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null "this"? 6164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # "this" is null, throw exception 6165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- vtable 6167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- super->vtable[BBBB] 6169c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 6170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK_RANGE: /* 0xfb */ 6174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK_RANGE.S */ 6175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */ 6176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 6178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 6180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 6185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 6186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- D (or stays CCCC) 6188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 6191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super 6192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null "this"? 6193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # "this" is null, throw exception 6194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- vtable 6196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- super->vtable[BBBB] 6198c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 6199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6203c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IPUT_OBJECT_VOLATILE: /* 0xfc */ 62043d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT_OBJECT_VOLATILE.S */ 62053d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT_OBJECT.S */ 62063d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 62073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Object field put. 62083d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 62093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iput-object 62103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 62113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vA, vB, field@CCCC */ 6212c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden GET_GLUE(%ecx) 62133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL(rIBASE) # need another reg 62143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 62153d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 62163d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzbl rINST_HI,%ecx # ecx<- BA 62173d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee sarl $4,%ecx # ecx<- B 62183d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 62193d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 62203d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee andb $0xf,rINST_LO # rINST_FULL<- A 62213d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 62223d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%eax,rIBASE,4),%eax # resolved entry 62233d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # is resolved entry null? 62243d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_IPUT_OBJECT_VOLATILE_finish # no, already resolved 62253d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rIBASE,OUT_ARG1(%esp) 62263d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(rIBASE) 62273d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IPUT_OBJECT_VOLATILE_resolve 62283d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 62293d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 6230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6232c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SGET_OBJECT_VOLATILE: /* 0xfd */ 62333d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET_OBJECT_VOLATILE.S */ 62343d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET.S */ 62353d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 62363d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit SGET handler. 62373d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 62383d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 62393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 62403d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vAA, field@BBBB */ 6241c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden GET_GLUE(%ecx) 62423d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 62433d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 62443d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 62453d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 62463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # resolved entry null? 62473d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je .LOP_SGET_OBJECT_VOLATILE_resolve # if not, make it so 62483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SGET_OBJECT_VOLATILE_finish: # field ptr in eax 62493d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offStaticField_value(%eax),%eax 62503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzbl rINST_HI,%ecx # ecx<- AA 62513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee FETCH_INST_WORD(2) 62523d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee ADVANCE_PC(2) 62533d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SET_VREG(%eax,%ecx) 6254c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden GOTO_NEXT 62553d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 62563d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 6257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6259c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SPUT_OBJECT_VOLATILE: /* 0xfe */ 62603d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT_OBJECT_VOLATILE.S */ 62613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT_OBJECT.S */ 62623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 62633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * SPUT object handler. 62643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 62653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vAA, field@BBBB */ 6266c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden GET_GLUE(%ecx) 62673d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 62683d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 62693d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 62703d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField 62713d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # resolved entry null? 62723d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je .LOP_SPUT_OBJECT_VOLATILE_resolve # if not, make it so 62733d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SPUT_OBJECT_VOLATILE_finish: # field ptr in eax 62743d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzbl rINST_HI,%ecx # ecx<- AA 62753d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_VREG(%ecx,%ecx) 62763d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_SPUT_OBJECT_VOLATILE_continue 62773d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 62783d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 6279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FF: /* 0xff */ 6282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_FF.S */ 6283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 6284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 6285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size dvmAsmInstructionStart, .-dvmAsmInstructionStart 6290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmInstructionEnd 6291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionEnd: 6292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 6294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 6295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sister implementations 6296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 6297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmSisterStart 6299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmAsmSisterStart, %function 6300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 6301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 4 6302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterStart: 6303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_STRING */ 6305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* This is the less common path, so we'll redo some work 6307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project here rather than force spills on the common path */ 6308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_STRING_resolve: 6309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 6310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,rINST_FULL # rINST_FULL<- AA 6311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 6313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax 6315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveString # go resolve 6319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 6322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 6323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_STRING_JUMBO */ 6328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* This is the less common path, so we'll redo some work 6330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project here rather than force spills on the common path */ 6331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_STRING_JUMBO_resolve: 6332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 6333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,rINST_FULL # rINST_FULL<- AA 6334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 6336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBBBBB 6337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax 6338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveString # go resolve 6342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 6345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 6346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 6348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_CLASS */ 6351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* This is the less common path, so we'll redo some work 6353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project here rather than force spills on the common path */ 6354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_CLASS_resolve: 6355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 6356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,rINST_FULL # rINST_FULL<- AA 6357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 6359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,OUT_ARG2(%esp) # true 6360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax 6362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # go resolve 6366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 6369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 6370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MONITOR_ENTER */ 6375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MONITOR_ENTER_continue: 6377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # have to - caller save 6378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmLockObject # dvmLockObject(self,object) 6381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef WITH_DEADLOCK_PREDICTION 6383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlueSelf(%ecx),%ecx # ecx<- glue->self 6385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offThread_exception(%ecx),%eax 6386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 6387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne common_exceptionThrown 6388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 6389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 6390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MONITOR_EXIT */ 6393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MONITOR_EXIT_continue: 6395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmUnlockObject # unlock(self,obj) 6396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 6398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 6400668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee je common_exceptionThrown # no, exception pending 6401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6402668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee.LOP_MONITOR_EXIT_errNullObject: 6403668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee ADVANCE_PC(1) # advance before throw 6404668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee jmp common_errNullObject 6405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CHECK_CAST */ 6407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 6410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds obj->clazz 6411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds class resolved from BBBB 6412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds object 6413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_fullcheck: 6415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInstanceofNonTrivial # eax<- boolean result 6419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_CHECK_CAST_okay # no, success 6422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # A cast has failed. We need to throw a ClassCastException with the 6424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # class of the object that failed to be cast. 6425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 6427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrClassCastException,%eax 6428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%ecx),%ecx 6429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- message 6430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- obj->clazz->descriptor 6431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowExceptionWithClassMessage 6433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path, and we're 6438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * going to have to recreate some data. 6439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds object 6441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolve: 6443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 6447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 6448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- metho->clazz 6449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 6450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 6451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- resolved ClassObject ptr 6453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 6455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yes, handle exception 6456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 6457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CHECK_CAST_resolved # pick up where we left off 6458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INSTANCE_OF */ 6460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 6463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds obj->clazz 6464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class resolved from BBBB 6465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_HI has BA 6466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC already spilled 6467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_fullcheck: 6469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInstanceofNonTrivial # eax<- boolean result 6472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # fall through to OP_INSTANCE_OF_store 6473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds boolean result 6476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_HI holds BA 6477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_store: 6479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 6481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecl<- A 6483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vA<- eax 6485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test succeeded, save and bail. 6489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds A 6490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_trivial: 6492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 6494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecl<- A 6496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%eax 6498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vA<- true 6499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 6503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC holds BBBB 6505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_HI holds BA 6506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolve: 6508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG1(%esp) # arg1<- BBBB 6509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx 6512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,OUT_ARG2(%esp) # arg2<- true 6513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 6516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- resolved ClassObject ptr 6517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Now, we need to sync up with fast path. We need eax to 6521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * hold the obj->clazz, and ecx to hold the resolved class 6522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved class 6524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 6525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 6526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB (obj) 6527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- obj->clazz 6528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INSTANCE_OF_resolved 6529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_NEW_INSTANCE */ 6531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_initialized: # on entry, ecx<- class 6533b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden /* TODO: remove test for interface/abstract, now done in verifier */ 6534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl $(ACC_INTERFACE|ACC_ABSTRACT),offClassObject_accessFlags(%ecx) 6535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG1(%esp) 6536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_INSTANCE_abstract 6537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_finish: # ecx=class 6538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocObject # eax<- new object 6540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 6542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, bail out 6545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 6546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class initialization required. 6551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class object 6553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_needinit: 6555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object 6556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInitClass # initialize class 6558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) # restore object 6559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_INSTANCE_initialized # success, continue 6561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) # failed, restore PC 6562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # go deal with init exception 6563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 6566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolve: 6569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 6571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 6572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) 6575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # call(clazz,off,flags) 6577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved ClassObject ptr 6578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # success? 6579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_INSTANCE_resolved # good to go 6580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 6582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6584b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden * TODO: remove this 6585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We can't instantiate an abstract class or interface, so throw an 6586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * InstantiationError with the class descriptor as the message. 6587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class object 6589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_abstract: 6591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%ecx),%eax 6592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrInstantiationError,OUT_ARG0(%esp) 6593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowExceptionWithClassMessage 6595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_NEW_ARRAY */ 6599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolve class. (This is an uncommon case.) 6602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class (null here) 6603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array length (vB) 6604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_ARRAY_resolve: 6606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%eax) # save array length 6608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 6609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- CCCC 6610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) 6613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 6616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx 6618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%eax) 6619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # successful resolution? 6620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, bail. 6621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# fall through to OP_NEW_ARRAY_finish 6622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Finish allocation 6625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class 6627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array length (vB) 6628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_ARRAY_finish: 6630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) 6633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocArrayByClass # eax<- call(clazz,length,flags) 6635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yup - go handle 6638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 6639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 6641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY */ 6645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_more: 6647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 6648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 6649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 6650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yes, handle it 6653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # note: fall through to .LOP_FILLED_NEW_ARRAY_continue 6655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 6658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array class [r0] 6659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds AA or BB [r10] 6660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is scratch 6661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC is valid, but has been spilled 6662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_continue: 6664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%eax),%ecx # ecx<- arrayClass->descriptor 6665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) # arg2<- flags 6666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 1(%ecx),%ecx # ecx<- descriptor[1] 6667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- arrayClass 66683d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%eax) 6669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'I',%cl # supported? 6670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'L',%cl 6672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'[',%cl 6674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_notimpl # no, not handled yet 6675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 66763d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,offGlue_retval+4(%eax) # save type 6677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(rINST_FULL) # save copy, need "B" later 6679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rINST_FULL 6680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,OUT_ARG1(%esp) # arg1<- A or AA (length) 6682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocArrayByClass # eax<- call(arrayClass, length, flags) 6683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # alloc successful? 6686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.l<- new array 6688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- FEDC or CCCC 6689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax),%eax # eax<- newArray->contents 6690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* at this point: 6692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax is pointer to tgt 6693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL is length 6694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is FEDC or CCCC 6695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL is BA 6696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC is valid, but spilled 6697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We now need to copy values from registers into the array 6698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # set up src pointer 6702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) # esi 6703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # edi 6704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edi # set up dst ptr 6705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),%esi # set up src ptr 6706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx # load count register 6707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rep 6709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsd 67103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%ecx) 6711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 67123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_retval+4(%ecx),%eax # eax<- type 6713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 6714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 6715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 6716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 4f 6717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(rPC) 6718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0x0f,rPC # rPC<- 0000000A 6719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,rPC # rPC<- 000A0000 6720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,rPC # rpc<- 000AFEDC 6721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: 6722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 6723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx # ecx<- next reg to load 6724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 6725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,rPC 6726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal 4(%eax),%eax 6727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,-4(%eax) 6728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub $1,rINST_FULL 6729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 3b 6730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project4: 67313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%ecx) 6732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 67333d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_retval+4(%ecx),%eax # eax<- type 6734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 67373d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee cmpb $'I',%al # Int array? 67383d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je 5f # skip card mark if so 67393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_retval(%ecx),%eax # eax<- object head 67403d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%ecx),%ecx # card table base 67413d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee shrl $GC_CARD_SHIFT,%eax # convert to card num 67423d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movb %cl,(%ecx,%eax) # mark card 67433d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee5: 6744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 6745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception indicating that we have not implemented this 6750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mode of filled-new-array. 6751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_notimpl: 6753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrInternalError,%eax 6754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrFilledNewArrayNotImpl,%eax 6756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 6758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY_RANGE */ 6762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_more: 6764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 6765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 6766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 6767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yes, handle it 6770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # note: fall through to .LOP_FILLED_NEW_ARRAY_RANGE_continue 6772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 6775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array class [r0] 6776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds AA or BB [r10] 6777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is scratch 6778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC is valid, but has been spilled 6779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_continue: 6781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%eax),%ecx # ecx<- arrayClass->descriptor 6782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) # arg2<- flags 6783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 1(%ecx),%ecx # ecx<- descriptor[1] 6784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- arrayClass 67853d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%eax) 6786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'I',%cl # supported? 6787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'L',%cl 6789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'[',%cl 6791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_RANGE_notimpl # no, not handled yet 6792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 67933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,offGlue_retval+4(%eax) # save type 6794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(rINST_FULL) # save copy, need "B" later 6796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rINST_FULL 6797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,OUT_ARG1(%esp) # arg1<- A or AA (length) 6799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocArrayByClass # eax<- call(arrayClass, length, flags) 6800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # alloc successful? 6803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.l<- new array 6805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- FEDC or CCCC 6806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax),%eax # eax<- newArray->contents 6807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* at this point: 6809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax is pointer to tgt 6810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL is length 6811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is FEDC or CCCC 6812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL is BA 6813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC is valid, but spilled 6814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We now need to copy values from registers into the array 6815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 6818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # set up src pointer 6819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) # esi 6820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # edi 6821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edi # set up dst ptr 6822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),%esi # set up src ptr 6823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx # load count register 6824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rep 6826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsd 68273d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%ecx) 6828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 68293d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_retval+4(%ecx),%eax # eax<- type 6830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 6831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 6832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 6833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 4f 6834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(rPC) 6835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0x0f,rPC # rPC<- 0000000A 6836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,rPC # rPC<- 000A0000 6837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,rPC # rpc<- 000AFEDC 6838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: 6839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 6840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx # ecx<- next reg to load 6841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 6842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,rPC 6843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal 4(%eax),%eax 6844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,-4(%eax) 6845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub $1,rINST_FULL 6846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 3b 6847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project4: 68483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%ecx) 6849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 68503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_retval+4(%ecx),%eax # eax<- type 6851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 68543d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee cmpb $'I',%al # Int array? 68553d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je 5f # skip card mark if so 68563d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_retval(%ecx),%eax # eax<- object head 68573d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%ecx),%ecx # card table base 68583d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee shrl $GC_CARD_SHIFT,%eax # convert to card num 68593d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movb %cl,(%ecx,%eax) # mark card 68603d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee5: 6861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 6862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception indicating that we have not implemented this 6867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mode of filled-new-array. 6868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_notimpl: 6870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrInternalError,%eax 6871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrFilledNewArrayNotImpl,%eax 6873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 6875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPL_FLOAT */ 6879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_isNaN: 6881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $-1,%ecx 6882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPL_FLOAT_finish 6883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPG_FLOAT */ 6885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_isNaN: 6887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%ecx 6888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPG_FLOAT_finish 6889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPL_DOUBLE */ 6891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_isNaN: 6893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $-1,%ecx 6894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPL_DOUBLE_finish 6895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPG_DOUBLE */ 6897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_isNaN: 6899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%ecx 6900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPG_DOUBLE_finish 6901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMP_LONG */ 6903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_bigger: 6905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%ecx 6907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMP_LONG_finish 6908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_smaller: 6909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $-1,%ecx 6911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_finish: 6912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,rINST_FULL) 6913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_AGET_WIDE */ 6918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_AGET_WIDE_finish: 6920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,8),%eax 6921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax),%ecx 6922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%eax),%eax 6923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) 6924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) 6925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_APUT_WIDE */ 6930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_WIDE_finish: 6932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,8),%eax 6933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,0) 6934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) 6935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4(%eax) 6936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,(%eax) 6938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_APUT_OBJECT */ 6942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* On entry: 6944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax<- array object 6945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx<- index 6946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL<- vAA 6947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_OBJECT_continue: 6949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,4),%ecx 6950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # storing null reference? 6951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_APUT_OBJECT_skip_check 6952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) 6954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- arrayObj->clazz 6955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 6956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmCanPutArrayElement # test object type vs. array type 6959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 69623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%eax) 6963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errArrayStore 69643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%eax),%eax # get card table base 69653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rINST_FULL,(%ecx) 69663d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee FETCH_INST_WORD(2) 69673d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee shrl $GC_CARD_SHIFT,%ecx # convert addr to card number 69683d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movb %al,(%eax,%ecx) # mark card 69693d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee ADVANCE_PC(2) 69703d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GOTO_NEXT 6971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_OBJECT_skip_check: 6973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx) 6974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET */ 6979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_resolve: 6982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 6985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 6987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 6988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 6989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 6990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 6993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_finish 6994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_finish: 6997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 6999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 7010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 7012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_WIDE */ 7016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_WIDE_resolve: 7019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_WIDE_finish 7031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_WIDE_finish: 7034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of field 7046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax),%ecx # ecx<- lsw 7047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%eax),%eax # eax<- msw 7048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) 7049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) 7050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_OBJECT */ 7055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_OBJECT_resolve: 7058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_OBJECT_finish 7070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_OBJECT_finish: 7073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 7086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 7088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_BOOLEAN */ 7092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BOOLEAN_resolve: 7095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BOOLEAN_finish 7107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BOOLEAN_finish: 7110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 7123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 7125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_BYTE */ 7129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BYTE_resolve: 7132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BYTE_finish 7144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BYTE_finish: 7147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 7160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 7162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_CHAR */ 7166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_CHAR_resolve: 7169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_CHAR_finish 7181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_CHAR_finish: 7184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 7197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 7199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_SHORT */ 7203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_SHORT_resolve: 7206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_SHORT_finish 7218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_SHORT_finish: 7221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 7234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 7236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT */ 7240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_resolve: 7243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_finish 7255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_finish: 7258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_WIDE */ 7276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_WIDE_resolve: 7279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_WIDE_finish 7291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_WIDE_finish: 7294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of field 7306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,0) # ecx<- lsw 7307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- msw 7308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4(%eax) 7309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,(%eax) 7311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_OBJECT */ 7315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_OBJECT_resolve: 7318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_OBJECT_finish 7330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_OBJECT_finish: 7333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 73453d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rINST_FULL,(%ecx,%eax) # obj.field <- v[A](8/16/32 bits) 73463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%eax) 73473d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl rINST_FULL,rINST_FULL # stored a NULL? 73483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%eax),%eax # get card table base 7349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 73503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je 1f # skip card mark if null store 73513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee shrl $GC_CARD_SHIFT,%ecx # object head to card number 73523d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movb %al,(%eax,%ecx) # mark card 73533d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee1: 7354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_BOOLEAN */ 7358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BOOLEAN_resolve: 7361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_BOOLEAN_finish 7373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BOOLEAN_finish: 7376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb rINST_LO,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_BYTE */ 7394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BYTE_resolve: 7397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_BYTE_finish 7409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BYTE_finish: 7412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb rINST_LO,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_CHAR */ 7430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_CHAR_resolve: 7433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_CHAR_finish 7445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_CHAR_finish: 7448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw rINST,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_SHORT */ 7466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_SHORT_resolve: 7469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_SHORT_finish 7481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_SHORT_finish: 7484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw rINST,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET */ 7502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_resolve: 7507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_finish # success, continue 7519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_WIDE */ 7522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_resolve: 7527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_WIDE_finish # success, continue 7539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_OBJECT */ 7542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_resolve: 7547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_OBJECT_finish # success, continue 7559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_BOOLEAN */ 7562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_resolve: 7567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_BOOLEAN_finish # success, continue 7579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_BYTE */ 7582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_resolve: 7587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_BYTE_finish # success, continue 7599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_CHAR */ 7602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_resolve: 7607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_CHAR_finish # success, continue 7619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_SHORT */ 7622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_resolve: 7627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_SHORT_finish # success, continue 7639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT */ 7642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_resolve: 7647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_finish # success, continue 7659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_WIDE */ 7662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_WIDE_resolve: 7667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_WIDE_finish # success, continue 7679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_OBJECT */ 7682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 76833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 76843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SPUT_OBJECT_continue: 76853d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,offStaticField_value(%eax) 76863d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %ecx,%ecx 76873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%ecx) 76883d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee FETCH_INST_WORD(2) 76893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je 1f 76903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%ecx),%ecx # get card table base 76913d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee shrl $GC_CARD_SHIFT,%eax # head to card number 76923d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movb %cl,(%ecx,%eax) # mark card 76933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee1: 76943d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee ADVANCE_PC(2) 76953d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GOTO_NEXT 76963d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 7697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_OBJECT_resolve: 7698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_OBJECT_finish # success, continue 7710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_BOOLEAN */ 7713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_resolve: 7718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_BOOLEAN_finish # success, continue 7730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_BYTE */ 7733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_resolve: 7738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_BYTE_finish # success, continue 7750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_CHAR */ 7753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_resolve: 7758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_CHAR_finish # success, continue 7770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_SHORT */ 7773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_resolve: 7778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_SHORT_finish # success, continue 7790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL */ 7793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_more: 7796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # ecx<- method->clazz 7797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 7798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags 7799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_continue # no, continue 7803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # yes, handle exception 7804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = resolved base method 7807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = scratch 7808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_continue: 7810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- GFED or CCCC 7811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 7812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%ecx # ecx<- D (or stays CCCC) 7813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- "this" 7815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%eax),%eax # eax<- baseMethod->methodIndex 7816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null this? 7817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # go if so 7818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%ecx),%ecx # ecx<- thisPtr->clazz 7819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable 7820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- vtable[methodIndex] 7821c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 7822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_SUPER */ 7824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 7827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method [r0] 7828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz [r9] 7829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_continue: 7831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%eax),%eax # eax<- method->clazz->super 7832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%ecx),%ecx # ecx<- baseMthod->methodIndex 7833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount) 7834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae .LOP_INVOKE_SUPER_nsm # method not present in superclass 7835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- ...clazz->super->vtable 7836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[methodIndex] 7837c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 7838c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 7839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = null (needs to be resolved base method) 7842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz 7843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_resolve: 7845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%eax) # method->clazz 7846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- method->clazz 7847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 7848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- resolver method type 7849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 7850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved base method 7855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%eax) # restore method->clazz 7856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_continue # good to go - continue 7857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # handle exception 7858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 7861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method 7862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_nsm: 7864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_name(%ecx),%eax 7865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov %eax,OUT_ARG1(%esp) 7866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNoSuchMethod 7867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_DIRECT */ 7869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 7872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL <- "this" register 7873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Things a bit ugly on this path, but it's the less 7874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * frequent one. We'll have to do some reloading. 7875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_resolve: 7877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) 7878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 7881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # reference (BBBB or CCCC) 7882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_DIRECT,OUT_ARG2(%esp) 7884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_DIRECT_finish 7890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_STATIC */ 7894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_STATIC_continue: 7896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_STATIC,%eax 7897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- flags 7898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # call(clazz,ref,flags) 7900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7902c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange 7903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_INTERFACE */ 7906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_INTERFACE_continue: 7908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex) 7909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 7912c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 7913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL_RANGE */ 7915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_RANGE_more: 7918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # ecx<- method->clazz 7919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 7920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags 7921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_RANGE_continue # no, continue 7925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # yes, handle exception 7926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = resolved base method 7929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = scratch 7930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_RANGE_continue: 7932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- GFED or CCCC 7933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 7934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%ecx # ecx<- D (or stays CCCC) 7935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- "this" 7937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%eax),%eax # eax<- baseMethod->methodIndex 7938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null this? 7939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # go if so 7940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%ecx),%ecx # ecx<- thisPtr->clazz 7941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable 7942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- vtable[methodIndex] 7943c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 7944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_SUPER_RANGE */ 7946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 7949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method [r0] 7950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz [r9] 7951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_continue: 7953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%eax),%eax # eax<- method->clazz->super 7954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%ecx),%ecx # ecx<- baseMthod->methodIndex 7955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount) 7956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae .LOP_INVOKE_SUPER_RANGE_nsm # method not present in superclass 7957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- ...clazz->super->vtable 7958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[methodIndex] 7959c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 7960c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 7961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = null (needs to be resolved base method) 7964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz 7965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_resolve: 7967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%eax) # method->clazz 7968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- method->clazz 7969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 7970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- resolver method type 7971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 7972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved base method 7977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%eax) # restore method->clazz 7978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_RANGE_continue # good to go - continue 7979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # handle exception 7980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 7983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method 7984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_nsm: 7986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_name(%ecx),%eax 7987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov %eax,OUT_ARG1(%esp) 7988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNoSuchMethod 7989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_DIRECT_RANGE */ 7991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 7994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL <- "this" register 7995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Things a bit ugly on this path, but it's the less 7996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * frequent one. We'll have to do some reloading. 7997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_resolve: 7999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) 8000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 8001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 8003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # reference (BBBB or CCCC) 8004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 8005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_DIRECT,OUT_ARG2(%esp) 8006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 8008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 8009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 8010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 8011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_DIRECT_RANGE_finish 8012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_STATIC_RANGE */ 8016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_STATIC_RANGE_continue: 8018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_STATIC,%eax 8019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- flags 8020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 8021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # call(clazz,ref,flags) 8022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 8024c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange 8025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_INTERFACE_RANGE */ 8028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_INTERFACE_RANGE_continue: 8030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex) 8031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 8033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 8034c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 8035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FLOAT_TO_INT */ 8037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_continue: 8040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 8042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 8043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 8044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 8046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_FLOAT_TO_INT_special_case # fix up result 8048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_finish: 8050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_special_case: 8054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 8055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 8056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_FLOAT_TO_INT_isNaN 8057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 8058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 8060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_INT_finish 8062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_isNaN: 8063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 8064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 8066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_INT_finish 8068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FLOAT_TO_LONG */ 8070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_continue: 8073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 8075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 8076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 8077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 8079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_FLOAT_TO_LONG_special_case # fix up result 8081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_finish: 8083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_special_case: 8087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 8088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 8089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_FLOAT_TO_LONG_isNaN 8090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 8091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 8093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_finish 8095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_isNaN: 8096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 8097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 8099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_finish 8101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DOUBLE_TO_INT */ 8103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_continue: 8106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 8108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 8109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 8110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 8112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DOUBLE_TO_INT_special_case # fix up result 8114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_finish: 8116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_special_case: 8120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 8121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 8122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_DOUBLE_TO_INT_isNaN 8123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 8124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 8126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_finish 8128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_isNaN: 8129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 8130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 8132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_finish 8134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DOUBLE_TO_LONG */ 8136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_continue: 8139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 8141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 8142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 8143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 8145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DOUBLE_TO_LONG_special_case # fix up result 8147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_finish: 8149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_special_case: 8153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 8154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 8155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_DOUBLE_TO_LONG_isNaN 8156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 8157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 8159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_finish 8161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_isNaN: 8162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 8163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 8165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_finish 8167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT */ 8169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_continue_div: 8170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_finish_div: 8173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecl<- AA 8174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 8175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT */ 8181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_continue_div: 8182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_finish_div: 8185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecl<- AA 8186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%edx,%ecx) 8187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MUL_LONG */ 8193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MUL_LONG_continue: 8195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%edx),%edx # full result now in %edx:%eax 8196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A 8197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,4(rFP,%ecx,4) # v[B+1]<- %edx 8198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) # restore rPC/%edx 8199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 8201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(rFP,%ecx,4) # v[B]<- %eax 8202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_LONG */ 8206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_continue: 8208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __divdi3 8209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_finish: 8210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 8211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 8212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 8214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_check_zero: 8219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial 8221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_check_neg1: 8224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,%eax 8225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial 8226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 8227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 8228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial1 8230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial1 8232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%edx 8235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_finish 8236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_LONG */ 8238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_continue: 8240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __moddi3 8241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_finish: 8242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 8243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 8244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 8246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_check_zero: 8251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial 8253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_check_neg1: 8256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,%eax 8257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial 8258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 8259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 8260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial1 8262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial1 8264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 8267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_finish 8268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHL_LONG */ 8270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHL_LONG_finish: 8272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[AA+0]<- %eax 8273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHR_LONG */ 8277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHR_LONG_finish: 8280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[AA+0]<- eax 8281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_USHR_LONG */ 8285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_USHR_LONG_finish: 8288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[BB+0]<- eax 8289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT_2ADDR */ 8294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_2ADDR_continue_div2addr: 8295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_2ADDR_finish_div2addr: 8298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 8299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT_2ADDR */ 8305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_2ADDR_continue_div2addr: 8306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_2ADDR_finish_div2addr: 8309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%edx,rINST_FULL) 8310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MUL_LONG_2ADDR */ 8316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MUL_LONG_2ADDR_continue: 8318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%edx),%edx # full result now in %edx:%eax 8319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,4(rIBASE) # v[A+1]<- %edx 8320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) # restore rPC/%edx 8321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(rIBASE) # v[A]<- %eax 8323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 8324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 8325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_LONG_2ADDR */ 8329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_continue: 8331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 8332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) 8333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 8334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __divdi3 8335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_finish: 8336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 8337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 8338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 8340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_check_zero: 8345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial 8347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_check_neg1: 8350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,%eax 8351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial 8352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 8353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 8354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial1 8356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial1 8358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%edx 8361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_2ADDR_finish 8362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_LONG_2ADDR */ 8364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_continue: 8366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 8367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) 8368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 8369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __moddi3 8370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_finish: 8371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 8372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 8373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 8375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_check_zero: 8380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial 8382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_check_neg1: 8385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,%eax 8386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial 8387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 8388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 8389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial1 8391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial1 8393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 8396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_2ADDR_finish 8397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHL_LONG_2ADDR */ 8399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHL_LONG_2ADDR_finish: 8402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0]<- eax 8403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHR_LONG_2ADDR */ 8408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHR_LONG_2ADDR_finish: 8411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0]<- eax 8412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_USHR_LONG_2ADDR */ 8417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_USHR_LONG_2ADDR_finish: 8420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0]<- eax 8421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT_LIT16 */ 8426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT16_continue_div: 8427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT16_finish_div: 8430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 8431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT_LIT16 */ 8437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT16_continue_div: 8438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT16_finish_div: 8441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%edx,rINST_FULL) 8442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT_LIT8 */ 8448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT8_continue_div: 8449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT8_finish_div: 8452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 8453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT_LIT8 */ 8459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT8_continue_div: 8460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT8_finish_div: 8463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%edx,rINST_FULL) 8464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 84693d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_IGET_VOLATILE */ 84703d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 84713d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 84723d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IGET_VOLATILE_resolve: 84733d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee EXPORT_PC() 84743d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL(rPC) 84753d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_method(rIBASE),rPC # rPC<- current method 84763d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rIBASE) 84773d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 84783d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL_TMP(%ecx) # save object pointer across call 84793d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rPC,OUT_ARG0(%esp) # pass in method->clazz 84803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveInstField # ... to dvmResolveInstField 84813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL_TMP(%ecx) 84823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rPC) 84833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # ... which returns InstrField ptr 84843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_IGET_VOLATILE_finish 84853d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown 84863d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 84873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IGET_VOLATILE_finish: 84883d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 84893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Currently: 84903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * eax holds resolved field 84913d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * ecx holds object 84923d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * rIBASE is scratch, but needs to be unspilled 84933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * rINST_FULL holds A 84943d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 84953d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 84963d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rIBASE) 84973d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %ecx,%ecx # object null? 84983d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je common_errNullObject # object was null 84993d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 85003d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rINST_FULL,%eax # eax<- A 85013d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee FETCH_INST_WORD(2) 85023d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SET_VREG(%ecx,%eax) 85033d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee ADVANCE_PC(2) 85043d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GOTO_NEXT 85053d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85063d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_IPUT_VOLATILE */ 85073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85083d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IPUT_VOLATILE_resolve: 85103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee EXPORT_PC() 85113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL(rPC) 85123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_method(rIBASE),rPC # rPC<- current method 85133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rIBASE) 85143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 85153d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL_TMP(%ecx) # save object pointer across call 85163d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rPC,OUT_ARG0(%esp) # pass in method->clazz 85173d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveInstField # ... to dvmResolveInstField 85183d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL_TMP(%ecx) 85193d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rPC) 85203d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # ... which returns InstrField ptr 85213d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_IPUT_VOLATILE_finish 85223d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown 85233d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85243d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IPUT_VOLATILE_finish: 85253d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 85263d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Currently: 85273d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * eax holds resolved field 85283d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * ecx holds object 85293d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * rIBASE is scratch, but needs to be unspilled 85303d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * rINST_FULL holds A 85313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 85323d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 85333d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 85343d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rIBASE) 85353d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %ecx,%ecx # object null? 85363d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je common_errNullObject # object was null 85373d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rINST_FULL,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 85383d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee FETCH_INST_WORD(2) 85393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee ADVANCE_PC(2) 85403d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GOTO_NEXT 85413d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85423d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_SGET_VOLATILE */ 85433d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85443d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 85453d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Go resolve the field 85463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 85473d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SGET_VOLATILE_resolve: 85483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%ecx) 85493d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 85503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_method(%ecx),%ecx # ecx<- current method 85513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee EXPORT_PC() # could throw, need to export 85523d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 85533d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL(rPC) 85543d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %eax,OUT_ARG1(%esp) 85553d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,OUT_ARG0(%esp) 85563d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveStaticField # eax<- resolved StaticField ptr 85573d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rPC) 85583d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax 85593d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_SGET_VOLATILE_finish # success, continue 85603d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown # no, handle exception 85613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_SPUT_VOLATILE */ 85633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 85653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Go resolve the field 85663d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 85673d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SPUT_VOLATILE_resolve: 85683d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%ecx) 85693d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 85703d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_method(%ecx),%ecx # ecx<- current method 85713d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee EXPORT_PC() # could throw, need to export 85723d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 85733d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL(rPC) 85743d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %eax,OUT_ARG1(%esp) 85753d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,OUT_ARG0(%esp) 85763d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveStaticField # eax<- resolved StaticField ptr 85773d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rPC) 85783d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax 85793d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_SPUT_VOLATILE_finish # success, continue 85803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown # no, handle exception 85813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_IGET_OBJECT_VOLATILE */ 85833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85853d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IGET_OBJECT_VOLATILE_resolve: 85863d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee EXPORT_PC() 85873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL(rPC) 85883d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_method(rIBASE),rPC # rPC<- current method 85893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rIBASE) 85903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 85913d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL_TMP(%ecx) # save object pointer across call 85923d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rPC,OUT_ARG0(%esp) # pass in method->clazz 85933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveInstField # ... to dvmResolveInstField 85943d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL_TMP(%ecx) 85953d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rPC) 85963d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # ... which returns InstrField ptr 85973d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_IGET_OBJECT_VOLATILE_finish 85983d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown 85993d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86003d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IGET_OBJECT_VOLATILE_finish: 86013d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 86023d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Currently: 86033d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * eax holds resolved field 86043d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * ecx holds object 86053d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * rIBASE is scratch, but needs to be unspilled 86063d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * rINST_FULL holds A 86073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 86083d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 86093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rIBASE) 86103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %ecx,%ecx # object null? 86113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je common_errNullObject # object was null 86123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 86133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rINST_FULL,%eax # eax<- A 86143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee FETCH_INST_WORD(2) 86153d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SET_VREG(%ecx,%eax) 86163d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee ADVANCE_PC(2) 86173d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GOTO_NEXT 86183d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 8619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_EXECUTE_INLINE */ 8620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_EXECUTE_INLINE_continue: 8622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Extract args, call function. 8624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = #of args (0-4) 8625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = call index 8626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @esp = return addr 8627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * esp is -4 from normal 8628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go ahead and load all 4 args, even if not used. 8630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rPC 8632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx 8635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 8636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rPC 8637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG0(%esp) 8638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx 8641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 8642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rPC 8643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG1(%esp) 8644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx 8647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 8648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rPC 8649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG2(%esp) 8650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx 8653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 8654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rPC 8655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG3(%esp) 8656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $4,%eax # index *= sizeof(table entry) 8658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp *gDvmInlineOpsTable(%eax) 8659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # will return to caller of .LOP_EXECUTE_INLINE_continue 8660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 86613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_IPUT_OBJECT_QUICK */ 86623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IPUT_OBJECT_QUICK_finish: 86643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl rINST_FULL,rINST_FULL # did we store null? 86653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee FETCH_INST_WORD(2) 86663d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%eax),%eax # get card table base 86673d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je 1f # skip card mark if null store 86683d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee shrl $GC_CARD_SHIFT,%ecx # object head to card number 86693d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movb %al,(%eax,%ecx) # mark card 86703d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee1: 86713d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee ADVANCE_PC(2) 86723d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GOTO_NEXT 86733d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86743d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_IPUT_OBJECT_VOLATILE */ 86753d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86763d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86773d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IPUT_OBJECT_VOLATILE_resolve: 86783d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee EXPORT_PC() 86793d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL(rPC) 86803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_method(rIBASE),rPC # rPC<- current method 86813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rIBASE) 86823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 86833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL_TMP(%ecx) # save object pointer across call 86843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rPC,OUT_ARG0(%esp) # pass in method->clazz 86853d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveInstField # ... to dvmResolveInstField 86863d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL_TMP(%ecx) 86873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rPC) 86883d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # ... which returns InstrField ptr 86893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_IPUT_OBJECT_VOLATILE_finish 86903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown 86913d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86923d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IPUT_OBJECT_VOLATILE_finish: 86933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 86943d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Currently: 86953d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * eax holds resolved field 86963d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * ecx holds object 86973d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * rIBASE is scratch, but needs to be unspilled 86983d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * rINST_FULL holds A 86993d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 87003d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 87013d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 87023d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rIBASE) 87033d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %ecx,%ecx # object null? 87043d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je common_errNullObject # object was null 87053d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl rINST_FULL,(%ecx,%eax) # obj.field <- v[A](8/16/32 bits) 87063d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%eax) 87073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl rINST_FULL,rINST_FULL # stored a NULL? 87083d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%eax),%eax # get card table base 87093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee FETCH_INST_WORD(2) 87103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je 1f # skip card mark if null store 87113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee shrl $GC_CARD_SHIFT,%ecx # object head to card number 87123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movb %al,(%eax,%ecx) # mark card 87133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee1: 87143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee ADVANCE_PC(2) 87153d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GOTO_NEXT 87163d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 87173d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_SGET_OBJECT_VOLATILE */ 87183d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 87193d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 87203d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Go resolve the field 87213d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 87223d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SGET_OBJECT_VOLATILE_resolve: 87233d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%ecx) 87243d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 87253d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_method(%ecx),%ecx # ecx<- current method 87263d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee EXPORT_PC() # could throw, need to export 87273d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 87283d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL(rPC) 87293d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %eax,OUT_ARG1(%esp) 87303d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,OUT_ARG0(%esp) 87313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveStaticField # eax<- resolved StaticField ptr 87323d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rPC) 87333d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax 87343d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_SGET_OBJECT_VOLATILE_finish # success, continue 87353d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown # no, handle exception 87363d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 87373d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_SPUT_OBJECT_VOLATILE */ 87383d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 87393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 87403d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SPUT_OBJECT_VOLATILE_continue: 87413d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,offStaticField_value(%eax) 87423d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %ecx,%ecx 87433d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%ecx) 87443d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee FETCH_INST_WORD(2) 87453d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je 1f 87463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%ecx),%ecx # get card table base 87473d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee shrl $GC_CARD_SHIFT,%eax # head to card number 87483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movb %cl,(%ecx,%eax) # mark card 87493d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee1: 87503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee ADVANCE_PC(2) 87513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GOTO_NEXT 87523d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 87533d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SPUT_OBJECT_VOLATILE_resolve: 87543d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee GET_GLUE(%ecx) 87553d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 87563d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_method(%ecx),%ecx # ecx<- current method 87573d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee EXPORT_PC() # could throw, need to export 87583d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 87593d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee SPILL(rPC) 87603d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %eax,OUT_ARG1(%esp) 87613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,OUT_ARG0(%esp) 87623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveStaticField # eax<- resolved StaticField ptr 87633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee UNSPILL(rPC) 87643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax 87653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_SPUT_OBJECT_VOLATILE_finish # success, continue 87663d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown # no, handle exception 87673d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 8768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size dvmAsmSisterStart, .-dvmAsmSisterStart 8769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmSisterEnd 8770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterEnd: 8771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/entry.S */ 8773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 8775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 8777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 8778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 8779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 8781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 8783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 8784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 8786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 8787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 8791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdRun 8792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdRun, %function 8793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bool dvmMterpStdRun(MterpGlue* glue) 8795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interpreter entry point. Returns changeInterp. 8797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdRun: 8800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebp 8801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %esp,%ebp 8802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %edi 8803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %esi 8804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebx 8805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* at this point, stack is misaligned by 1 word 8807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project We're allocating spill space for 6 words, plus 8808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project outgoing argument (5 words) and local variables 8809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (4 words) - 15 words or 60 bytes total. See 8810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project diagram in header.S 8811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 8812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl $60,%esp 8813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Set up "named" registers */ 8815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl IN_ARG0(%ebp),%ecx 8816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,rGLUE_SPILL(%ebp) 8817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_PC_FROM_GLUE(%ecx) 8818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_FP_FROM_GLUE(%ecx) 8819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $dvmAsmInstructionStart,rIBASE 8820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Remember %esp for future "longjmp" */ 8822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %esp,offGlue_bailPtr(%ecx) 8823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* How to start? */ 8825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb offGlue_entryPoint(%ecx),%al 8826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Normal start? */ 8828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryInstr,%al 8829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .Lnot_instr 8830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Normal case: start executing the instruction at rPC */ 8832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 8833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lnot_instr: 8836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Reset to normal case */ 8837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $kInterpEntryInstr,offGlue_entryPoint(%ecx) 8838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryReturn,%al 8839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_returnFromMethod 8840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryThrow,%al 8841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 8842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx %al,%eax 8843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrBadEntryPoint,OUT_ARG0(%esp) 8845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call printf 8846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAbort 8847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Not reached */ 8848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdBail 8851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdBail, %function 8852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * void dvmMterpStdBail(MterpGlue* glue, bool changeInterp) 8854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Restore the stack pointer and PC from the save point established on entry. 8856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is essentially the same as a longjmp, but should be cheaper. The 8857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * last instruction causes us to return to whoever called dvmMterpStdRun. 8858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We're not going to build a standard frame here, so the arg accesses will 8860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * look a little strange. 8861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * esp+4 (arg0) MterpGlue* glue 8864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * esp+8 (arg1) bool changeInterp 8865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdBail: 8867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%esp),%ecx # grab glue 8868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 8(%esp),%eax # changeInterp to return reg 8869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_bailPtr(%ecx),%esp # Stack back to normal 8870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl $60,%esp # Strip dvmMterpStdRun's frame 8871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %ebx 8872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %esi 8873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %edi 8874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %ebp 8875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ret # return to dvmMterpStdRun's caller 8876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Strings 8880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .section .rodata 8882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrBadEntryPoint: 8883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Bad entry point %d\n" 8884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/footer.S */ 8886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 8888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 8890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 8891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 8892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 8894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 8896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 8897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 8899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 8900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common subroutines and data. 8903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code when a backwards branch is taken 8907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ebx (a.k.a. rINST_FULL) -> PC adjustment in 16-bit words 8910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_backwardBranch: 8912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 8913c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch call common_periodicChecks # Note: expects rPC to be preserved 8914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(rINST_FULL) 8915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 8916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8918c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8919c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8920c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch/* 8921c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Common code for method invocation with range. 8922c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * 8923c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * On entry: 8924c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * eax = Method* methodToCall 8925c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * rINST trashed, must reload 8926c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8927c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8928c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodRange: 8929c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewRange: 8930c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8931c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8932c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * prepare to copy args to "outs" area of current frame 8933c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8934c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8935c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzbl 1(rPC),rINST_FULL # rINST_FULL<- AA 8936c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl 4(rPC), %ecx # %ecx<- CCCC 8937c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SPILL(rPC) 8938c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%edx,rFP) # %edx<- &StackSaveArea 8939c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch test rINST_FULL, rINST_FULL 8940c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rINST_FULL, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- AA 8941c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jz .LinvokeArgsDone # no args; jump to args done 8942c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8943c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8944c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8945c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, %ecx=CCCC, LOCAL0_OFFSET(%ebp)=count, %edx=&outs (&stackSaveArea) 8946c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * (very few methods have > 10 args; could unroll for common cases) 8947c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8948c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8949c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ebx, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- save %ebx 8950c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea (rFP, %ecx, 4), %ecx # %ecx<- &vCCCC 8951c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shll $2, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- offset 8952c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl LOCAL0_OFFSET(%ebp), %edx # %edx<- update &outs 8953c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shrl $2, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- offset 8954c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1: 8955c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (%ecx), %ebx # %ebx<- vCCCC 8956c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%ecx), %ecx # %ecx<- &vCCCC++ 8957c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl $1, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET<- LOCAL0_OFFSET-- 8958c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ebx, (%edx) # *outs<- vCCCC 8959c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%edx), %edx # outs++ 8960c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne 1b # loop if count (LOCAL0_OFFSET(%ebp)) not zero 8961c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ebx # %ebx<- restore %ebx 8962c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp .LinvokeArgsDone # continue 8963c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8964c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8965c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax is "Method* methodToCall", the method we're trying to call 8966c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * prepare to copy args to "outs" area of current frame 8967c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8968c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8969c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodNoRange: 8970c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewNoRange: 8971c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzbl 1(rPC),rINST_FULL # rINST_FULL<- BA 8972c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SPILL(rPC) 8973c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rINST_FULL, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- BA 8974c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shrl $4, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- B 8975c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je .LinvokeArgsDone # no args; jump to args done 8976c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl 4(rPC), %ecx # %ecx<- GFED 8977c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%edx,rFP) # %edx<- &StackSaveArea 8978c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8979c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8980c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, %ecx=GFED, LOCAL0_OFFSET(%ebp)=count, %edx=outs 8981c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8982c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8983c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNonRange: 8984c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $2, LOCAL0_OFFSET(%ebp) # compare LOCAL0_OFFSET(%ebp) to 2 8985c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- GFED 8986c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl 1f # handle 1 arg 8987c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je 2f # handle 2 args 8988c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $4, LOCAL0_OFFSET(%ebp) # compare LOCAL0_OFFSET(%ebp) to 4 8989c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl 3f # handle 3 args 8990c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je 4f # handle 4 args 8991c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch5: 8992c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch andl $15, rINST_FULL # rINST<- A 8993c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 8994c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, rINST_FULL, 4), %ecx # %ecx<- vA 8995c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vA 8996c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 8997c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch4: 8998c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $12, %ecx # %ecx<- G 8999c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 9000c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vG 9001c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vG 9002c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 9003c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch3: 9004c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x0f00, %ecx # %ecx<- 0F00 9005c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $8, %ecx # %ecx<- F 9006c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 9007c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vF 9008c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vF 9009c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 9010c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch2: 9011c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x00f0, %ecx # %ecx<- 00E0 9012c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $4, %ecx # %ecx<- E 9013c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 9014c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vE 9015c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vE 9016c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 9017c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1: 9018c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x000f, %ecx # %ecx<- 000D 9019c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vD 9020c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, -4(%edx) # *--outs<- vD 9021c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch0: 9022c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9023c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 9024c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax is "Method* methodToCall", the method we're trying to call 9025c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * find space for the new stack frame, check for overflow 9026c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 9027c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9028c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeArgsDone: 9029c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl offMethod_registersSize(%eax), %edx # %edx<- methodToCall->regsSize 9030c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl offMethod_outsSize(%eax), %ecx # %ecx<- methodToCall->outsSize 9031c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET<- methodToCall 9032c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shl $2, %edx # %edx<- update offset 9033c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%eax,rFP) # %eax<- &StackSaveArea 9034c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl %edx, %eax # %eax<- newFP; (old savearea - regsSize) 9035c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%edx) # %edx<- pMterpGlue 9036c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- &outs 9037c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl $sizeofStackSaveArea, %eax # %eax<- newSaveArea (stack save area using newFP) 9038c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_interpStackEnd(%edx), %edx # %edx<- glue->interpStackEnd 9039c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, LOCAL2_OFFSET(%ebp) # LOCAL2_OFFSET<- glue->interpStackEnd 9040c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shl $2, %ecx # %ecx<- update offset for outsSize 9041c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, %edx # %edx<- newSaveArea 9042c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch sub %ecx, %eax # %eax<- bottom; (newSaveArea - outsSize) 9043c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp LOCAL2_OFFSET(%ebp), %eax # compare interpStackEnd and bottom 9044c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL0_OFFSET(%ebp), %eax # %eax<- restore methodToCall 9045c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl .LstackOverflow # handle frame overflow 9046c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9047c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 9048c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * set up newSaveArea 9049c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 9050c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9051c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#ifdef EASY_GDB 9052c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%ecx,rFP) # %ecx<- &StackSaveArea 9053c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, offStackSaveArea_prevSave(%edx) # newSaveArea->prevSave<- &outs 9054c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#endif 9055c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offStackSaveArea_prevFrame(%edx) # newSaveArea->prevFrame<- rFP 9056c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rPC_SPILL(%ebp), %ecx 9057c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, offStackSaveArea_savedPc(%edx) # newSaveArea->savedPc<- rPC 9058c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch testl $ACC_NATIVE, offMethod_accessFlags(%eax) # check for native call 9059c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, offStackSaveArea_method(%edx) # newSaveArea->method<- method to call 9060c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne .LinvokeNative # handle native call 9061c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9062c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 9063c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Update "glue" values for the new method 9064c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFp 9065c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 9066c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9067c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offMethod_clazz(%eax), %edx # %edx<- method->clazz 9068c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%ecx) # %ecx<- pMterpGlue 9069c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offClassObject_pDvmDex(%edx), %edx # %edx<- method->clazz->pDvmDex 9070c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, offGlue_method(%ecx) # glue->method<- methodToCall 9071c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, offGlue_methodClassDex(%ecx) # glue->methodClassDex<- method->clazz->pDvmDex 9072c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offMethod_insns(%eax), rPC # rPC<- methodToCall->insns 9073c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%ecx), %eax # %eax<- glue->self 9074c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), rFP # rFP<- newFP 9075c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offThread_curFrame(%eax) # glue->self->curFrame<- newFP 9076c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch FETCH_INST() 9077c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GOTO_NEXT # jump to methodToCall->insns 9078c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9079c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 9080c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Prep for the native call 9081c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFP, %edx=newSaveArea 9082c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 9083c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9084c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNative: 9085c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%ecx) # %ecx<- pMterpGlue 9086c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, OUT_ARG1(%esp) # push parameter methodToCall 9087c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%ecx), %ecx # %ecx<- glue->self 9088d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl offThread_jniLocal_topCookie(%ecx), %eax # %eax<- self->localRef->... 9089d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl %eax, offStackSaveArea_localRefCookie(%edx) # newSaveArea->localRefCookie<- top 9090c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, OUT_ARG4(%esp) # save newSaveArea 9091c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %edx # %edx<- newFP 9092c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, offThread_curFrame(%ecx) # glue->self->curFrame<- newFP 9093c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, OUT_ARG3(%esp) # save glue->self 9094c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, OUT_ARG2(%esp) # push parameter glue->self 9095c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%ecx) # %ecx<- pMterpGlue 9096c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG1(%esp), %eax # %eax<- methodToCall 9097c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea offGlue_retval(%ecx), %ecx # %ecx<- &retval 9098c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, OUT_ARG0(%esp) # push parameter pMterpGlue 9099c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch push %edx # push parameter newFP 9100c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9101c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch call *offMethod_nativeFunc(%eax) # call methodToCall->nativeFunc 9102c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%esp), %esp 9103c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG4(%esp), %ecx # %ecx<- newSaveArea 9104c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG3(%esp), %eax # %eax<- glue->self 9105d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl offStackSaveArea_localRefCookie(%ecx), %edx # %edx<- old top 9106c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $0, offThread_exception(%eax) # check for exception 9107c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offThread_curFrame(%eax) # glue->self->curFrame<- rFP 9108d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl %edx, offThread_jniLocal_topCookie(%eax) # new top <- old top 9109c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch UNSPILL(rPC) 9110c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_exceptionThrown # handle exception 9111c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch FETCH_INST_WORD(3) 9112c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch ADVANCE_PC(3) 9113c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GOTO_NEXT # jump to next instruction 9114c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 91156ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden.LstackOverflow: # eax=methodToCall 91166ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden movl %eax, OUT_ARG1(%esp) # push parameter methodToCall 9117c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%eax) # %eax<- pMterpGlue 9118c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%eax), %eax # %eax<- glue->self 9119c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, OUT_ARG0(%esp) # push parameter self 91206ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden call dvmHandleStackOverflow # call: (Thread* self, Method* meth) 9121c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch UNSPILL(rPC) # return: void 9122c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_exceptionThrown # handle exception 9123c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9124c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common invoke code (old-style). 9127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TUNING: Rewrite along lines of new armv5 code? 9128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = Method* methodToCall 9131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = bool methodCallRange 9132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST trashed, must reload 9133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_invokeOld: 9135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- methodCallRange 9136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 9137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl (rPC),rINST_FULL # recover rINST 9138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- method 9139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 9140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_TO_GLUE(%ecx) 9141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_FP_TO_GLUE(%ecx) 9142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 9143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,OUT_ARG3(%esp)# arg3<- AA 9144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- GLUE 9145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG4(%esp) # arg4<- GFED/CCCC 9146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmMterp_invokeMethod 9147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_resumeAfterGlueCall 9148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Do we need the thread to be suspended or have debugger/profiling activity? 9152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ebx -> PC adjustment in 16-bit words (must be preserved) 9155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx -> GLUE pointer 9156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: A call will normally kill %eax, rPC/%edx and %ecx. To 9158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * streamline the normal case, this routine will preserve rPC and 9159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * %ecx in addition to the normal caller save regs. The save/restore 9160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is a bit ugly, but will happen in the relatively uncommon path. 9161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TUNING: Might be worthwhile to inline this. 9162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: Basic-block style Jit will need a hook here as well. Fold it into 9163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the suspendCount check so we can get both in 1 shot. 9164c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * TODO: to match the other intepreters, this should handle suspension 9165c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * and then check for debugger/profiling after dvmCheckSuspendPending 9166c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * returns. 9167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_periodicChecks: 9169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_pSelfSuspendCount(%ecx),%eax # eax <- &suspendCount 9170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(%eax) 9171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 9172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) || defined(WITH_PROFILER) 9174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) 9175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_pDebuggerActive(%ecx),%eax # eax <- &DebuggerActive 9176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_PROFILER) 9178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_pActiveProfilers(%ecx),%ecx # ecx <- &ActiveProfilers 9179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) && defined(WITH_PROFILER) 9181c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden # TODO: check for NULL before load 9182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl (%eax),%eax # eax <- debuggerActive (boolean) 9183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (%ecx),%eax # eax <- debuggerActive || activeProfilers 9184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#elif defined(WITH_DEBUGGER) 9185c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden # TODO: check for NULL before load 9186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl (%eax),%eax # eax <- debuggerActive (boolean) 9187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#elif defined(WITH_PROFILER) 9188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx),%eax # eax <= activeProfilers 9189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) # restore rGLUE 9191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 9192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 3f # one or both active - switch interp 9193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 9194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ret 9196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Check for suspend */ 9198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 9199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point, the return pointer to the caller of 9200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * common_periodicChecks is on the top of stack. We need to preserve 9201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC(edx) and GLUE(ecx). We'll spill rPC, and reload GLUE. 9202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The outgoing profile is: 9203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bool dvmCheckSuspendPending(Thread* self) 9204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Because we reached here via a call, go ahead and build a new frame. 9205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 920699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project EXPORT_PC() # need for precise GC 9207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%eax # eax<- glue->self 9208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # save edx 9209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebp 9210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %esp,%ebp 9211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl $24,%esp 9212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 9213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmCheckSuspendPending 9214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl $24,%esp 9215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %ebp 9216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 9217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 9218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ret 9219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Switch interpreters */ 9221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Note: %ebx contains the 16-bit word offset to be applied to rPC to 9222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "complete" the interpretation of backwards branches. In effect, we 9223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * are completing the interpretation of the branch instruction here, 9224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and the new interpreter will resume interpretation at the branch 9225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * target. However, a switch request recognized during the handling 9226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * of a return from method instruction results in an immediate abort, 9227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and the new interpreter will resume by re-interpreting the return 9228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction. 9229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: 9231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ebx,2),rPC # adjust pc to show target 9232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) # bail expect GLUE already loaded 9233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,rINST_FULL # set changeInterp to true 9234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_gotoBail 9235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for handling a return instruction 9239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_returnFromMethod: 9241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 9242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Set entry mode in case we bail */ 9243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $kInterpEntryReturn,offGlue_entryPoint(%ecx) 9244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl rINST_FULL,rINST_FULL # zero offset in case we switch interps 9245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call common_periodicChecks # Note: expects %ecx to be preserved 9246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(%eax,rFP) # eax<- saveArea (old) 9248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStackSaveArea_prevFrame(%eax),rFP # rFP<- prevFrame 9249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (offStackSaveArea_method-sizeofStackSaveArea)(rFP),rINST_FULL 9250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,rINST_FULL # break? 9251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_gotoBail # break frame, bail out completely 9252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStackSaveArea_savedPc(%eax),rPC # pc<- saveArea->savedPC 9254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%eax # eax<- self 9255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,offGlue_method(%ecx) # glue->method = newSave->meethod 9256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rFP,offThread_curFrame(%eax) # self->curFrame = fp 9257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rINST_FULL),%eax # eax<- method->clazz 9258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 9259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_pDvmDex(%eax),%eax # eax<- method->clazz->pDvmDex 9260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 9261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_methodClassDex(%ecx) 9262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* not bailing - restore entry mode to default */ 9263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $kInterpEntryInstr,offGlue_entryPoint(%ecx) 9264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 9265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Prepare to strip the current frame and "longjump" back to caller of 9268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * dvmMterpStdRun. 9269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on entry: 9271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds changeInterp 9272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds glue pointer 9273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected profile: dvmMterpStdBail(MterpGlue *glue, bool changeInterp) 9275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_gotoBail: 9277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_TO_GLUE(%ecx) # export state to glue 9278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_FP_TO_GLUE(%ecx) 9279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # glue in arg0 9280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,OUT_ARG1(%esp) # changeInterp in arg1 9281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmMterpStdBail # bail out.... 9282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * After returning from a "glued" function, pull out the updated values 9286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and start executing at the next instruction. 9287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project common_resumeAfterGlueCall: 9289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 9290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_PC_FROM_GLUE(%ecx) 9291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_FP_FROM_GLUE(%ecx) 9292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 9293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 9294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Integer divide or mod by zero 9297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errDivideByZero: 9299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 9300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrArithmeticException,%eax 9301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 9302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrDivideByZero,%eax 9303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 9304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 9305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 9306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 9307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 9308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size. 9311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNegativeArraySize: 9313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 9314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNegativeArraySizeException,%eax 9315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 9316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 9317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 9318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 9319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 9320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 9321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 9322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size. 9325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNoSuchMethod: 9327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 9329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNoSuchMethodError,%eax 9330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 9331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 9332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 9333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 9334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 9335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 9336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 9337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Hit a null object when we weren't expecting one. Export the PC, throw a 9340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * NullPointerException and goto the exception processing code. 9341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNullObject: 9343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 9344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNullPointerException,%eax 9345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 9346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 9347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 9348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 9349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 9350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 9351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 9352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array index exceeds max. 9355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayIndex: 9357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 9358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrArrayIndexException,%eax 9359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 9360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 9361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 9362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 9363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 9364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 9365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 9366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Invalid array value. 9368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayStore: 9370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 9371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrArrayStoreException,%eax 9372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 9373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 9374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 9375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 9376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 9377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 9378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 9379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Somebody has thrown an exception. Handle it. 9382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the exception processing code returns to us (instead of falling 9384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out of the interpreter), continue with whatever the next instruction 9385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * now happens to be. 9386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This does not return. 9388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_exceptionThrown: 9390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 9391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_TO_GLUE(%ecx) 9392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_FP_TO_GLUE(%ecx) 9393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 9394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmMterp_exceptionThrown 9395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_resumeAfterGlueCall 9396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_abort: 9398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xdeadf00d,%eax 9399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call *%eax 9400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Strings 9404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .section .rodata 9407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNullPointerException: 9408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NullPointerException;" 9409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArithmeticException: 9410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArithmeticException;" 9411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrDivideByZero: 9412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "divide by zero" 9413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArrayIndexException: 9414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArrayIndexOutOfBoundsException;" 9415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArrayStoreException: 9416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArrayStoreException;" 9417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNegativeArraySizeException: 9418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NegativeArraySizeException;" 9419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInstantiationError: 9420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InstantiationError;" 9421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrClassCastException: 9422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ClassCastException;" 9423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNoSuchMethodError: 9424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NoSuchMethodError;" 9425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInternalError: 9426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InternalError;" 9427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrFilledNewArrayNotImpl: 9428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "filled-new-array only implemented for 'int'" 9429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9430