InterpAsm-x86.S revision be74aeb457df67355ce7c16721ecc436c8fd770a
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 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmInstructionStart 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmAsmInstructionStart, %function 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionStart = .L_OP_NOP 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOP: /* 0x00 */ 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOP.S */ 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE: /* 0x01 */ 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $12,rINST_FULL # rINST_FULL<- B 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) # fp[A]<-fp[B] 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_FROM16: /* 0x02 */ 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */ 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%eax # eax <= AA 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw 2(rPC),rINST # rINST <= BBBB 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,rINST_FULL) # ecx<- fp[BBBB] 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%ecx,%eax) # fp[AA]<- ecx] 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_16: /* 0x03 */ 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_16.S */ 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE: /* 0x04 */ 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE.S */ 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide vA, vB */ 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx <- BA 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rinst_FULL<- B 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[B+0] 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- v[B+1] 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rINST_FULL,%ecx,1) # v[A+1]<- rINST_FULL 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[A+0]<- eax 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_FROM16: /* 0x05 */ 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE_FROM16.S */ 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/from16 vAA, vBBBB */ 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- AAAA 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,%ecx,0) # rINST_FULL<- v[BBBB+0] 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[BBBB+1] 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rINST_FULL,%eax,0) # v[AAAA+0]<- rINST_FULL 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,%eax,1) # v[AAAA+1]<- eax 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_16: /* 0x06 */ 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE_16.S */ 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/16 vAAAA, vBBBB */ 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,%ecx,0) # rINST_WORD<- v[BBBB+0] 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[BBBB+1] 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rINST_FULL,%eax,0) # v[AAAA+0]<- rINST_FULL 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,%eax,1) # v[AAAA+1]<- ecx 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT: /* 0x07 */ 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT.S */ 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $12,rINST_FULL # rINST_FULL<- B 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) # fp[A]<-fp[B] 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_FROM16: /* 0x08 */ 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_FROM16.S */ 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */ 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%eax # eax <= AA 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw 2(rPC),rINST # rINST <= BBBB 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,rINST_FULL) # ecx<- fp[BBBB] 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%ecx,%eax) # fp[AA]<- ecx] 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_16: /* 0x09 */ 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_16.S */ 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_16.S */ 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT: /* 0x0a */ 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */ 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) # eax<- rGLUE 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- AA 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_retval(%eax),%eax # eax<- glue->retval.l 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,%ecx) # fp[AA]<- retval.l 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_WIDE: /* 0x0b */ 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT_WIDE.S */ 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-result-wide vAA */ 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_retval(%ecx),%eax 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4+offGlue_retval(%ecx),%ecx 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0] <- eax 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,1) # v[AA+1] <- ecx 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_OBJECT: /* 0x0c */ 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT_OBJECT.S */ 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */ 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) # eax<- rGLUE 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- AA 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_retval(%eax),%eax # eax<- glue->retval.l 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,%ecx) # fp[AA]<- retval.l 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_EXCEPTION: /* 0x0d */ 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_EXCEPTION.S */ 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-exception vAA */ 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offThread_exception(%ecx),%eax # eax<- dvmGetException bypass 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) # fp[AA]<- exception object 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,offThread_exception(%ecx) # dvmClearException bypass 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_VOID: /* 0x0e */ 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_VOID.S */ 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN: /* 0x0f */ 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN.S */ 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.i <- AA 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_WIDE: /* 0x10 */ 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_WIDE.S */ 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 64-bit value. Copies the return value into the "glue" 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* return-wide vAA */ 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- v[AA+1] 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4+offGlue_retval(%ecx) 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_OBJECT: /* 0x11 */ 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_OBJECT.S */ 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN.S */ 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.i <- AA 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_4: /* 0x12 */ 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_4.S */ 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/4 vA, #+B */ 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsx rINST_HI,%eax # eax<-ssssssBx 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %eax,%ecx # ecx<- A 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_16: /* 0x13 */ 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_16.S */ 514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/16 vAA, #+BBBB */ 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssBBBB 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%eax # eax<- AA 517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) # vAA<- ssssBBBB 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST: /* 0x14 */ 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST.S */ 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const vAA, #+BBBBbbbb */ 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # grab all 32 bits at once 529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- eax 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_HIGH16: /* 0x15 */ 537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_HIGH16.S */ 538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/high16 vAA, #+BBBB0000 */ 539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- 0000BBBB 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,%eax # eax<- BBBB0000 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- eax 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_16: /* 0x16 */ 550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_16.S */ 551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/16 vAA, #+BBBB */ 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%eax # eax<- ssssBBBB 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # rPC:eax<- ssssssssssssBBBB 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) # store msw 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # store lsw 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_32: /* 0x17 */ 566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_32.S */ 567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/32 vAA, #+BBBBbbbb */ 568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # eax<- BBBBbbbb 569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # rPC:eax<- ssssssssssssBBBB 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) # store msw 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # store lsw 576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE: /* 0x18 */ 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE.S */ 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide vAA, #+HHHHhhhhBBBBbbbb */ 584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # eax<- lsw 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx <- AA 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 6(rPC),rINST_FULL # rINST_FULL<- msw 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),%ecx # dst addr 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4(%ecx) 589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(5) 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(%ecx) 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(5) 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_HIGH16: /* 0x19 */ 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_HIGH16.S */ 599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/high16 vAA, #+BBBB000000000000 */ 600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- 0000BBBB 601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,%eax # eax<- BBBB0000 605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,1) # v[AA+1]<- eax 606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[AA+0]<- eax 608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING: /* 0x1a */ 614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_STRING.S */ 615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBB */ 617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings 622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResString[BBBB] 623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_STRING_resolve 627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- rResString[BBBB] 628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING_JUMBO: /* 0x1b */ 634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_STRING_JUMBO.S */ 635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBBBBBB */ 637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # eax<- BBBBBBBB 639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings 642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResString[BBBB] 643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_STRING_JUMBO_resolve 647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- rResString[BBBB] 648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_CLASS: /* 0x1c */ 654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_CLASS.S */ 655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/class vAA, Class@BBBB */ 657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- dvmDex->pResClasses 662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResClasses[BBBB] 663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_CLASS_resolve 667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- rResClasses[BBBB] 668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_ENTER: /* 0x1d */ 674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MONITOR_ENTER.S */ 675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Synchronize on an object. 677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-enter vAA */ 679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 68599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project EXPORT_PC() # need for precise GC, MONITOR_TRACKING 686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_MONITOR_ENTER_continue 687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_EXIT: /* 0x1e */ 692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MONITOR_EXIT.S */ 693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlock an object. 695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Exceptions that occur when unlocking a monitor need to appear as 697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if they happened at the following instruction. See the Dalvik 698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction spec. 699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-exit vAA */ 701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) 703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # go if so 707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MONITOR_EXIT_continue 712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CHECK_CAST: /* 0x1f */ 716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CHECK_CAST.S */ 717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if a cast from one class to another is allowed. 719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* check-cast vAA, class@BBBB */ 721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- vAA (object) 724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # is oject null? 727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CHECK_CAST_okay # null obj, cast always succeeds 729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved class 730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # have we resolved this before? 732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CHECK_CAST_resolve # no, go do it now 733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolved: 734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl %eax,%ecx # same class (trivial success)? 735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_CHECK_CAST_fullcheck # no, do full check 736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_okay: 737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INSTANCE_OF: /* 0x20 */ 744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INSTANCE_OF.S */ 745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if an object reference is an instance of a class. 747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Most common situation is a non-null object, being compared against 749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an already-resolved class. 750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* instance-of vA, vB, class@CCCC */ 752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB (obj) 755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # object null? 757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_store # null obj, not instance, store it 760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rPC # rPC<- CCCC 761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,rPC,4),%ecx # ecx<- resolved class 763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- obj->clazz 764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # have we resolved this before? 765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_resolve # not resolved, do it now 766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolved: # eax<- obj->clazz, ecx<- resolved class 767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl %eax,%ecx # same class (trivial success)? 768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_trivial # yes, trivial finish 769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INSTANCE_OF_fullcheck # no, do full check 770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ARRAY_LENGTH: /* 0x21 */ 774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ARRAY_LENGTH.S */ 775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the length of an array. 777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) # ecx<- vB (object ref) 781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # is null? 783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_length(%ecx),%ecx 786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_INSTANCE: /* 0x22 */ 793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEW_INSTANCE.S */ 794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new instance of a class. 796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-instance vAA, class@BBBB */ 798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved class 805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # resolved? 807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_NEW_INSTANCE_resolve # no, go do it 808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolved: # on entry, ecx<- class 809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $CLASS_INITIALIZED,offClassObject_status(%ecx) 810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_NEW_INSTANCE_initialized 811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_NEW_INSTANCE_needinit 812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_ARRAY: /* 0x23 */ 816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEW_ARRAY.S */ 817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Allocate an array of objects, specified with the array class 819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and a count. 820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The verifier guarantees that this is an array class, so we don't 822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check for it here. 823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-array vA, vB, class@CCCC */ 825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- CCCC 829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved class 831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax 832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB (array length) 834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_errNegativeArraySize # bail 838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_ARRAY_finish # yes, fast path 840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_NEW_ARRAY_resolve # resolve now 841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY: /* 0x24 */ 845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */ 846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA or BA 855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%eax),%eax # eax<- pDvmDex->pResClasses 858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved class 860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_continue # yes, continue 863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # less frequent path, so we'll redo some work 864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- BBBB 867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FILLED_NEW_ARRAY_more 869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY_RANGE: /* 0x25 */ 873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY_RANGE.S */ 874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */ 875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA or BA 884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%eax),%eax # eax<- pDvmDex->pResClasses 887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved class 889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_RANGE_continue # yes, continue 892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # less frequent path, so we'll redo some work 893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- BBBB 896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FILLED_NEW_ARRAY_RANGE_more 898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILL_ARRAY_DATA: /* 0x26 */ 903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILL_ARRAY_DATA.S */ 904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* fill-array-data vAA, +BBBBBBBB */ 905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) 909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandleFillArrayData 914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # exception thrown? 917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_THROW: /* 0x27 */ 924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_THROW.S */ 925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception object in the current thread. 927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* throw vAA */ 929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- exception object 932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offThread_exception(%ecx) # thread->exception<- obj 936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO: /* 0x28 */ 941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO.S */ 942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 8-bit offset. 944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset, which we need to 946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * double to get a byte offset. 947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto +AA */ 949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl rINST_HI,rINST_FULL # ebx<- ssssssAA 950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # test for <0 951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_16: /* 0x29 */ 960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO_16.S */ 961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 16-bit offset. 963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset 965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/16 +AAAA */ 967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # rINST_FULL<- ssssAAAA 968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # test for <0 969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_32: /* 0x2a */ 978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO_32.S */ 979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 32-bit offset. 981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset. 983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlike most opcodes, this one is allowed to branch to itself, so 985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * our "backward branch" test must be "<=0" instead of "<0". 986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/32 AAAAAAAA */ 988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),rINST_FULL # rINST_FULL<- AAAAAAAA 989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,rINST_FULL # test for <= 0 990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle common_backwardBranch 991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_PACKED_SWITCH: /* 0x2b */ 999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */ 1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # ARG1<- vAA 1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # ARG0<- switchData 1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandlePackedSwitch 1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,rINST_FULL # set up word offset 1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle common_backwardBranch # check on special actions 1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(rINST_FULL) 1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPARSE_SWITCH: /* 0x2c */ 1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPARSE_SWITCH.S */ 1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */ 1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # ARG1<- vAA 1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # ARG0<- switchData 1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandleSparseSwitch 1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,rINST_FULL # set up word offset 1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle common_backwardBranch # check on special actions 1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(rINST_FULL) 1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_FLOAT: /* 0x2d */ 1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPL_FLOAT.S */ 1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPL_FLOAT_isNaN 1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPL_FLOAT_finish 1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPL_FLOAT_finish 1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_finish: 1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_FLOAT: /* 0x2e */ 1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_FLOAT.S */ 1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPG_FLOAT_isNaN 1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPG_FLOAT_finish 1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPG_FLOAT_finish 1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_finish: 1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_DOUBLE: /* 0x2f */ 1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPL_DOUBLE.S */ 1128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPL_DOUBLE_isNaN 1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPL_DOUBLE_finish 1148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPL_DOUBLE_finish 1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_finish: 1152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_DOUBLE: /* 0x30 */ 1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 1172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPG_DOUBLE_isNaN 1179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPG_DOUBLE_finish 1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPG_DOUBLE_finish 1182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_finish: 1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMP_LONG: /* 0x31 */ 1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMP_LONG.S */ 1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two 64-bit values. Puts 0, 1, or -1 into the destination 1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * register based on the results of the comparison. 1195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* cmp-long vAA, vBB, vCC */ 1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),rPC # rPC<- CC 1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,1) # eax<- v[BB+1] 1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,0) # ecx<- v[BB+0] 1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl 4(rFP,rPC,4),%eax 1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl .LOP_CMP_LONG_smaller 1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg .LOP_CMP_LONG_bigger 1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub (rFP,rPC,4),%ecx 1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ja .LOP_CMP_LONG_bigger 1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMP_LONG_smaller 1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMP_LONG_finish 1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQ: /* 0x32 */ 1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_EQ.S */ 1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NE: /* 0x33 */ 1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_NE.S */ 1247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LT: /* 0x34 */ 1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LT.S */ 1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jge 1f 1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GE: /* 0x35 */ 1308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GE.S */ 1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl 1f 1326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GT: /* 0x36 */ 1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GT.S */ 1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle 1f 1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LE: /* 0x37 */ 1370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LE.S */ 1371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg 1f 1388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQZ: /* 0x38 */ 1401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_EQZ.S */ 1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NEZ: /* 0x39 */ 1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_NEZ.S */ 1430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LTZ: /* 0x3a */ 1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LTZ.S */ 1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jge 1f 1472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GEZ: /* 0x3b */ 1485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GEZ.S */ 1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl 1f 1500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GTZ: /* 0x3c */ 1513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GTZ.S */ 1514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle 1f 1528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LEZ: /* 0x3d */ 1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LEZ.S */ 1542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg 1f 1556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3E: /* 0x3e */ 1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_3E.S */ 1570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3F: /* 0x3f */ 1577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_3F.S */ 1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_40: /* 0x40 */ 1585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_40.S */ 1586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_41: /* 0x41 */ 1593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_41.S */ 1594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_42: /* 0x42 */ 1601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_42.S */ 1602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_43: /* 0x43 */ 1609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_43.S */ 1610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET: /* 0x44 */ 1617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_contents(%eax,%ecx,4),%eax 1634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_WIDE: /* 0x45 */ 1644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_WIDE.S */ 1645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 64 bits. vAA <- vBB[vCC]. 1647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_AGET_WIDE_finish # index < length, OK 1659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errArrayIndex # index >= length, bail 1660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_OBJECT: /* 0x46 */ 1664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_OBJECT.S */ 1665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_contents(%eax,%ecx,4),%eax 1682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BOOLEAN: /* 0x47 */ 1693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_BOOLEAN.S */ 1694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl offArrayObject_contents(%eax,%ecx,1),%eax 1711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BYTE: /* 0x48 */ 1722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_BYTE.S */ 1723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl offArrayObject_contents(%eax,%ecx,1),%eax 1740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_CHAR: /* 0x49 */ 1751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_CHAR.S */ 1752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offArrayObject_contents(%eax,%ecx,2),%eax 1769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_SHORT: /* 0x4a */ 1780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_SHORT.S */ 1781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl offArrayObject_contents(%eax,%ecx,2),%eax 1798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT: /* 0x4b */ 1809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,4),%eax 1826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,(%eax) 1829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_WIDE: /* 0x4c */ 1836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_WIDE.S */ 1837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 64 bits. vBB[vCC]<-vAA. 1839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_APUT_WIDE_finish # index < length, OK 1851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errArrayIndex # index >= length, bail 1852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_OBJECT: /* 0x4d */ 1856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_OBJECT.S */ 1857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- vAA 1869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_APUT_OBJECT_continue 1873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errArrayIndex # index >= length, bail 1874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BOOLEAN: /* 0x4e */ 1878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_BOOLEAN.S */ 1879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,1),%eax 1896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb %cl,(%eax) 1899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BYTE: /* 0x4f */ 1907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_BYTE.S */ 1908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,1),%eax 1925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb %cl,(%eax) 1928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_CHAR: /* 0x50 */ 1936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_CHAR.S */ 1937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,2),%eax 1954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %cx,(%eax) 1957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_SHORT: /* 0x51 */ 1965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_SHORT.S */ 1966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,2),%eax 1983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %cx,(%eax) 1986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET: /* 0x52 */ 1994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 1995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 1997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 1999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_finish # no, already resolved 2014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_resolve 2017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE: /* 0x53 */ 2021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_WIDE.S */ 2022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit instance field get. 2024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_WIDE_finish # no, already resolved 2040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_WIDE_resolve 2043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT: /* 0x54 */ 2047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_OBJECT.S */ 2048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_OBJECT_finish # no, already resolved 2068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_OBJECT_resolve 2071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BOOLEAN: /* 0x55 */ 2076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_BOOLEAN.S */ 2077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BOOLEAN_finish # no, already resolved 2097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_BOOLEAN_resolve 2100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BYTE: /* 0x56 */ 2105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_BYTE.S */ 2106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BYTE_finish # no, already resolved 2126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_BYTE_resolve 2129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_CHAR: /* 0x57 */ 2134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_CHAR.S */ 2135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_CHAR_finish # no, already resolved 2155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_CHAR_resolve 2158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_SHORT: /* 0x58 */ 2163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_SHORT.S */ 2164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_SHORT_finish # no, already resolved 2184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_SHORT_resolve 2187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT: /* 0x59 */ 2192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_finish # no, already resolved 2213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_resolve 2216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE: /* 0x5a */ 2220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_WIDE.S */ 2221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit instance field put. 2223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_WIDE_finish # no, already resolved 2239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_WIDE_resolve 2242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT: /* 0x5b */ 2246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_OBJECT.S */ 2247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_OBJECT_finish # no, already resolved 2268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_OBJECT_resolve 2271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BOOLEAN: /* 0x5c */ 2276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_BOOLEAN.S */ 2277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_BOOLEAN_finish # no, already resolved 2298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_BOOLEAN_resolve 2301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BYTE: /* 0x5d */ 2306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_BYTE.S */ 2307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_BYTE_finish # no, already resolved 2328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_BYTE_resolve 2331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_CHAR: /* 0x5e */ 2336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_CHAR.S */ 2337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_CHAR_finish # no, already resolved 2358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_CHAR_resolve 2361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_SHORT: /* 0x5f */ 2366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_SHORT.S */ 2367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_SHORT_finish # no, already resolved 2388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_SHORT_resolve 2391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET: /* 0x60 */ 2396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_resolve # if not, make it so 2410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_finish: # field ptr in eax 2411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 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_WIDE: /* 0x61 */ 2421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_WIDE.S */ 2422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit SGET handler. 2424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* sget-wide vAA, field@BBBB */ 2427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_WIDE_resolve # if not, make it so 2434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_finish: # field ptr in eax 2435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%ecx # ecx<- lsw 2436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4+offStaticField_value(%eax),%eax # eax<- msw 2437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 2438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) 2439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) 2440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_OBJECT: /* 0x62 */ 2447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_OBJECT.S */ 2448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_OBJECT_resolve # if not, make it so 2462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_finish: # field ptr in eax 2463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BOOLEAN: /* 0x63 */ 2474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_BOOLEAN.S */ 2475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_BOOLEAN_resolve # if not, make it so 2489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_finish: # field ptr in eax 2490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BYTE: /* 0x64 */ 2501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_BYTE.S */ 2502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_BYTE_resolve # if not, make it so 2516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_finish: # field ptr in eax 2517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_CHAR: /* 0x65 */ 2528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_CHAR.S */ 2529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_CHAR_resolve # if not, make it so 2543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_finish: # field ptr in eax 2544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_SHORT: /* 0x66 */ 2555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_SHORT.S */ 2556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-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_SGET_SHORT_resolve # if not, make it so 2570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_finish: # field ptr in eax 2571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT: /* 0x67 */ 2582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_resolve # if not, make it so 2596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_finish: # field ptr in eax 2597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_WIDE: /* 0x68 */ 2607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_WIDE.S */ 2608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_WIDE_resolve # if not, make it so 2621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_WIDE_finish: # field ptr in eax 2622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,%ecx,0) # rINST_FULL<- lsw 2624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- msw 2625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,offStaticField_value(%eax) 2626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+offStaticField_value(%eax) 2629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_OBJECT: /* 0x69 */ 2634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_OBJECT.S */ 2635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_OBJECT_resolve # if not, make it so 2649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_OBJECT_finish: # field ptr in eax 2650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BOOLEAN: /* 0x6a */ 2661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_BOOLEAN.S */ 2662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_BOOLEAN_resolve # if not, make it so 2676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_finish: # field ptr in eax 2677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BYTE: /* 0x6b */ 2688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_BYTE.S */ 2689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_BYTE_resolve # if not, make it so 2703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_finish: # field ptr in eax 2704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_CHAR: /* 0x6c */ 2715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_CHAR.S */ 2716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_CHAR_resolve # if not, make it so 2730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_finish: # field ptr in eax 2731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_SHORT: /* 0x6d */ 2742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_SHORT.S */ 2743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_SHORT_resolve # if not, make it so 2757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_finish: # field ptr in eax 2758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL: /* 0x6e */ 2769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */ 2770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 2773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 2775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 2779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 2780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 2781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%eax),%eax # eax<- pDvmDex->pResMethods 2783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved baseMethod 2784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 2785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_continue # yes, continue 2786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 2787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 2788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 2789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_VIRTUAL_more 2791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER: /* 0x6f */ 2795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */ 2796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 2798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 2800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rINST_FULL) 2804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(rINST_FULL),%ecx # ecx<- pDvmDex 2806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved baseMethod 2809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rINST_FULL),%eax # eax<- method 2810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rINST_FULL # rINST_FULL<- GFED or CCCC 2811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 2812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,rINST_FULL # rINST_FULL<- D (or stays CCCC) 2813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- "this" ptr 2815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # null "this"? 2816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, throw 2817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 2818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 2819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_continue # yes - go on 2820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_SUPER_resolve 2821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT: /* 0x70 */ 2825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */ 2826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 2828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 2830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 2831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 2832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 2833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/range 2835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 2841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rPC # rPC<- GFED or CCCC 2845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 2846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 2847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,rPC # rPC<- D (or stays CCCC) 2848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 2850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rPC) # ecx<- "this" ptr 2851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INVOKE_DIRECT_resolve # not resolved, do it now 2852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_finish: 2853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 2854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null "this"? 2855c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange # no, continue on 2856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 2857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC: /* 0x71 */ 2861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */ 2862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 2864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 2866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 2872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 2875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 2876c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange 2877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 2879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 2880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 2881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 2882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 2883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_STATIC_continue 2884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE: /* 0x72 */ 2888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */ 2889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 2891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 2893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 2897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 2899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 2900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 2902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null this? 2904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, fail 2905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax# eax<- thisPtr->clazz 2906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- class 2907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- methodClassDex 2908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- method 2909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) # arg3<- dex 2910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG2(%esp) # arg2<- method 2912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 2913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_INTERFACE_continue 2915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_73: /* 0x73 */ 2919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_73.S */ 2920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 2921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 2922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_RANGE: /* 0x74 */ 2927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_RANGE.S */ 2928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */ 2929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 2932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 2934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 2938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 2939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 2940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%eax),%eax # eax<- pDvmDex->pResMethods 2942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved baseMethod 2943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 2944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_RANGE_continue # yes, continue 2945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 2946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 2947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 2948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_VIRTUAL_RANGE_more 2950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_RANGE: /* 0x75 */ 2955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_RANGE.S */ 2956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */ 2957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 2959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 2961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rINST_FULL) 2965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(rINST_FULL),%ecx # ecx<- pDvmDex 2967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved baseMethod 2970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rINST_FULL),%eax # eax<- method 2971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rINST_FULL # rINST_FULL<- GFED or CCCC 2972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 2973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,rINST_FULL # rINST_FULL<- D (or stays CCCC) 2974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- "this" ptr 2976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # null "this"? 2977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, throw 2978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 2979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 2980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_RANGE_continue # yes - go on 2981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_SUPER_RANGE_resolve 2982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_RANGE: /* 0x76 */ 2987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT_RANGE.S */ 2988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */ 2989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 2991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 2993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 2994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 2995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 2996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/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 SPILL(rPC) 3006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rPC # rPC<- GFED or CCCC 3008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 3009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,rPC # rPC<- D (or stays CCCC) 3011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 3013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rPC) # ecx<- "this" ptr 3014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INVOKE_DIRECT_RANGE_resolve # not resolved, do it now 3015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_finish: 3016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null "this"? 3018c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange # no, continue on 3019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 3020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC_RANGE: /* 0x77 */ 3025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC_RANGE.S */ 3026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */ 3027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 3029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 3031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 3035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 3037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 3038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 3040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 3041c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange 3042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 3043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 3044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 3045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 3046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 3048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_STATIC_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_INVOKE_INTERFACE_RANGE: /* 0x78 */ 3054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE_RANGE.S */ 3055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */ 3056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 3058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 3060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 3064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 3065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 3067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 3069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 3070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null this? 3071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, fail 3072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax# eax<- thisPtr->clazz 3073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- class 3074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- methodClassDex 3075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- method 3076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) # arg3<- dex 3077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG2(%esp) # arg2<- method 3079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_INTERFACE_RANGE_continue 3082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_79: /* 0x79 */ 3087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_79.S */ 3088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 3089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 3090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_7A: /* 0x7a */ 3095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_7A.S */ 3096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 3097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 3098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_INT: /* 0x7b */ 3103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_INT.S */ 3104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %eax 3119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_INT: /* 0x7c */ 3126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOT_INT.S */ 3127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %eax 3142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_LONG: /* 0x7d */ 3149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_LONG.S */ 3150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 3152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 3153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # ecx<- BA 3154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 3155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 3156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[B+1] 3157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %eax 3158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $0,%ecx 3159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %ecx 3160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[A+0]<- eax 3161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,1) # v[A+1]<- ecx 3162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_LONG: /* 0x7e */ 3169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOT_LONG.S */ 3170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 3172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 3173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # ecx<- BA 3174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 3175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 3176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[B+1] 3177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %eax 3178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %ecx 3179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[A+0]<- eax 3180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,1) # v[A+1]<- ecx 3181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_FLOAT: /* 0x7f */ 3188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_FLOAT.S */ 3189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fchs 3201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 3202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_DOUBLE: /* 0x80 */ 3208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_DOUBLE.S */ 3209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fchs 3221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 3222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_LONG: /* 0x81 */ 3228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_LONG.S */ 3229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* int to long vA, vB */ 3230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- +A 3231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # will step on edx later 3234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # edx:eax<- sssssssBBBBBBBB 3236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[A+1]<- edx/rPC 3237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[A+0]<- %eax 3239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_FLOAT: /* 0x82 */ 3246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_FLOAT.S */ 3247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fildl (rFP,rINST_FULL,4) # %st0<- vB 3255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 3260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_DOUBLE: /* 0x83 */ 3266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_DOUBLE.S */ 3267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fildl (rFP,rINST_FULL,4) # %st0<- vB 3275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 3280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_INT: /* 0x84 */ 3286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_INT.S */ 3287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* we ignore the high word, making this equivalent to a 32-bit reg move */ 3288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 3289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 3290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 3291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 3292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 3293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $12,rINST_FULL # rINST_FULL<- B 3294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 3295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) # fp[A]<-fp[B] 3298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_FLOAT: /* 0x85 */ 3304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_FLOAT.S */ 3305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fildll (rFP,rINST_FULL,4) # %st0<- vB 3313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 3318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_DOUBLE: /* 0x86 */ 3324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_DOUBLE.S */ 3325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fildll (rFP,rINST_FULL,4) # %st0<- vB 3333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 3338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_INT: /* 0x87 */ 3344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_INT.S */ 3345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_INT_continue 3376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_LONG: /* 0x88 */ 3381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_LONG.S */ 3382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long 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 .if 0 3394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_continue 3413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_DOUBLE: /* 0x89 */ 3418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_DOUBLE.S */ 3419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 3432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_INT: /* 0x8a */ 3438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_INT.S */ 3439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_continue 3470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_LONG: /* 0x8b */ 3475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_LONG.S */ 3476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long 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 .if 1 3488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_continue 3507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_FLOAT: /* 0x8c */ 3512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_FLOAT.S */ 3513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 3526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_BYTE: /* 0x8d */ 3532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_BYTE.S */ 3533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl %al,%eax 3548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_CHAR: /* 0x8e */ 3555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_CHAR.S */ 3556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl %ax,%eax 3571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_SHORT: /* 0x8f */ 3578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_SHORT.S */ 3579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl %ax,%eax 3594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT: /* 0x90 */ 3601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT.S */ 3602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT: /* 0x91 */ 3628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_INT.S */ 3629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT: /* 0x92 */ 3655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT.S */ 3656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary multiplication. 3658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul vAA, vBB, vCC */ 3660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP,%ecx,4),%eax # trashes rPC/edx 3665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT: /* 0x93 */ 3675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT.S */ 3676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv.S */ 3677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 3680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 3681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 3689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 3690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 3691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_continue_div 3692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 3693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_continue_div 3694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 3695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_finish_div 3696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT: /* 0x94 */ 3702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT.S */ 3703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv.S */ 3704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 3707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 3708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 3716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 3717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 3718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_continue_div 3719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 3720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_continue_div 3721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 3722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_finish_div 3723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT: /* 0x95 */ 3729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT.S */ 3730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT: /* 0x96 */ 3756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT.S */ 3757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT: /* 0x97 */ 3783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT.S */ 3784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT: /* 0x98 */ 3810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT.S */ 3811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 3812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 3814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 3815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: addl %ecx,%eax 3822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # tmp<- AA 3823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT: /* 0x99 */ 3832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT.S */ 3833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 3834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 3836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 3837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: addl %ecx,%eax 3844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # tmp<- AA 3845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT: /* 0x9a */ 3854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT.S */ 3855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 3856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 3858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 3859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: addl %ecx,%eax 3866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # tmp<- AA 3867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG: /* 0x9b */ 3876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_LONG.S */ 3877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 3878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 3880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 3887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 3888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 3889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 3890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 3891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 3892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 3894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG: /* 0x9c */ 3902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_LONG.S */ 3903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 3904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 3906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 3913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 3914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 3915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 3916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 3917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 3918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 3920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG: /* 0x9d */ 3928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_LONG.S */ 3929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply. 3931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We could definately use more free registers for 3933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this code. We must spill rPC (edx) because it 3934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is used by imul. We'll also spill rINST (ebx), 3935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * giving us eax, ebc, ecx and edx as computational 3936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * temps. On top of that, we'll spill rIBASE (edi) 3937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for use as the vB pointer and rFP (esi) for use 3938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as the vC pointer. Yuck. 3939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long vAA, vBB, vCC */ 3941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- B 3942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- C 3943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) 3945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) 3946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rINST_FULL) 3947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%eax,4),rIBASE # rIBASE<- &v[B] 3948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),rFP # rFP<- &v[C] 3949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(rIBASE),%ecx # ecx<- Bmsw 3950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP),%ecx # ecx<- (Bmsw*Clsw) 3951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(rFP),%eax # eax<- Cmsw 3952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rIBASE),%eax # eax<- (Cmsw*Blsw) 3953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %eax,%ecx # ecx<- (Bmsw*Clsw)+(Cmsw*Blsw) 3954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (rFP),%eax # eax<- Clsw 3955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mull (rIBASE) # eax<- (Clsw*Alsw) 3956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rINST_FULL) 3957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 3958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MUL_LONG_continue 3959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG: /* 0x9e */ 3963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG.S */ 3964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div vAA, vBB, vCC */ 3965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 3966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 3967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 3969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 3970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG2(%esp) 3971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 3972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_check_zero 3973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 3974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_check_neg1 3975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_notSpecial: 3976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 3977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 3978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_notSpecial1: 3979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 3980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) 3981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 3982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_continue 3983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG: /* 0x9f */ 3987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_LONG.S */ 3988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG.S */ 3989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div vAA, vBB, vCC */ 3990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 3991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 3992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 3994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 3995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG2(%esp) 3996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 3997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_check_zero 3998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 3999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_check_neg1 4000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_notSpecial: 4001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 4002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 4003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_notSpecial1: 4004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 4005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) 4006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 4007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_continue 4008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG: /* 0xa0 */ 4013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_LONG.S */ 4014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 4024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 4025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 4026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 4028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 4029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 4031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG: /* 0xa1 */ 4039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_LONG.S */ 4040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 4050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 4051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 4052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 4054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 4055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 4057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG: /* 0xa2 */ 4065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_LONG.S */ 4066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 4076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 4077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 4078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 4080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 4081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 4083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG: /* 0xa3 */ 4091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_LONG.S */ 4092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long vAA, vBB, vCC */ 4101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # spill edx 4107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,%eax,1) # ecx<- v[BB+1] 4108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,%ecx) # ecx<- vCC 4109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,0) # eax<- v[BB+0] 4110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shldl %eax,%edx 4111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax 4112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edx 4115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 4116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 4118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[AA+1]<- %edx 4119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHL_LONG_finish 4122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG: /* 0xa4 */ 4126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_LONG.S */ 4127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long vAA, vBB, vCC */ 4136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # spill edx 4142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,%eax,1) # edx<- v[BB+1] 4143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,%ecx) # ecx<- vCC 4144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,0) # eax<- v[BB+0] 4145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%edx 4147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $31,%edx 4151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 4153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[AA+1]<- edx 4154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHR_LONG_finish 4157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG: /* 0xa5 */ 4161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_LONG.S */ 4162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long vAA, vBB, vCC */ 4171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # spill edx 4177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,%eax,1) # edx<- v[BB+1] 4178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,%ecx) # ecx<- vCC 4179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,0) # eax<- v[BB+0] 4180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%edx 4182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %edx,%edx 4186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 4188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[BB+1]<- edx 4189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_USHR_LONG_finish 4191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT: /* 0xa6 */ 4195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_FLOAT.S */ 4196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fadds (rFP,%ecx,4) # ex: faddp 4207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT: /* 0xa7 */ 4218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_FLOAT.S */ 4219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fsubs (rFP,%ecx,4) # ex: faddp 4230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT: /* 0xa8 */ 4241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_FLOAT.S */ 4242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fmuls (rFP,%ecx,4) # ex: faddp 4253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT: /* 0xa9 */ 4264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_FLOAT.S */ 4265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fdivs (rFP,%ecx,4) # ex: faddp 4276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT: /* 0xaa */ 4287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_FLOAT.S */ 4288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float vAA, vBB, vCC */ 4289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vCC to fp stack 4292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 4296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 4297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 4298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 4299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 4300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 4301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE: /* 0xab */ 4308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_DOUBLE.S */ 4309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project faddl (rFP,%ecx,4) # ex: faddp 4320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE: /* 0xac */ 4331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_DOUBLE.S */ 4332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fsubl (rFP,%ecx,4) # ex: faddp 4343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 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_MUL_DOUBLE: /* 0xad */ 4354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_DOUBLE.S */ 4355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fmull (rFP,%ecx,4) # ex: faddp 4366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 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 4374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE: /* 0xae */ 4377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_DOUBLE.S */ 4378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fdivl (rFP,%ecx,4) # ex: faddp 4389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE: /* 0xaf */ 4400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_DOUBLE.S */ 4401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float vAA, vBB, vCC */ 4402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vCC to fp stack 4405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 4409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 4410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 4411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 4412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 4413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 4414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_2ADDR: /* 0xb0 */ 4421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_2ADDR.S */ 4422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT_2ADDR: /* 0xb1 */ 4451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_INT_2ADDR.S */ 4452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_2ADDR: /* 0xb2 */ 4481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_2ADDR.S */ 4482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul vA, vB */ 4483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP,%ecx,4),%eax 4489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 4491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_2ADDR: /* 0xb3 */ 4498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_2ADDR.S */ 4499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv2addr.S */ 4500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 4502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 4503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/2addr vA, vB */ 4505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vBB 4511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 4513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 4514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 4515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_2ADDR_continue_div2addr 4516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 4517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_2ADDR_continue_div2addr 4518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 4519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_2ADDR_finish_div2addr 4520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_2ADDR: /* 0xb4 */ 4526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_2ADDR.S */ 4527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv2addr.S */ 4528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 4530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 4531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/2addr vA, vB */ 4533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vBB 4539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 4541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 4542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 4543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_2ADDR_continue_div2addr 4544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 4545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_2ADDR_continue_div2addr 4546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 4547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_2ADDR_finish_div2addr 4548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_2ADDR: /* 0xb5 */ 4554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_2ADDR.S */ 4555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_2ADDR: /* 0xb6 */ 4584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_2ADDR.S */ 4585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_2ADDR: /* 0xb7 */ 4614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_2ADDR.S */ 4615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_2ADDR: /* 0xb8 */ 4644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT_2ADDR.S */ 4645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 4656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: sarl %cl,%eax 4657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 4658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_2ADDR: /* 0xb9 */ 4667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT_2ADDR.S */ 4668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 4679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: sarl %cl,%eax 4680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 4681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_2ADDR: /* 0xba */ 4690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT_2ADDR.S */ 4691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 4702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: sarl %cl,%eax 4703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 4704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG_2ADDR: /* 0xbb */ 4713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_LONG_2ADDR.S */ 4714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG_2ADDR: /* 0xbc */ 4735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_LONG_2ADDR.S */ 4736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG_2ADDR: /* 0xbd */ 4757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_LONG_2ADDR.S */ 4758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply, 2-addr version 4760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We could definately use more free registers for 4762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this code. We must spill rPC (edx) because it 4763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is used by imul. We'll also spill rINST (ebx), 4764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * giving us eax, ebc, ecx and edx as computational 4765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * temps. On top of that, we'll spill rIBASE (edi) 4766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for use as the vA pointer and rFP (esi) for use 4767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as the vB pointer. Yuck. 4768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long/2addr vA, vB */ 4770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 4771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 4772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) 4775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) 4776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%eax,4),rIBASE # rIBASE<- &v[A] 4777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,rINST_FULL,4),rFP # rFP<- &v[B] 4778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(rIBASE),%ecx # ecx<- Amsw 4779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP),%ecx # ecx<- (Amsw*Blsw) 4780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(rFP),%eax # eax<- Bmsw 4781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rIBASE),%eax # eax<- (Bmsw*Alsw) 4782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %eax,%ecx # ecx<- (Amsw*Blsw)+(Bmsw*Alsw) 4783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (rFP),%eax # eax<- Blsw 4784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mull (rIBASE) # eax<- (Blsw*Alsw) 4785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MUL_LONG_2ADDR_continue 4786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG_2ADDR: /* 0xbe */ 4790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */ 4791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/2addr vA, vB */ 4792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax 4793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,%eax # eax<- B 4794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 4795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 4798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 4799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG2(%esp) 4800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 4801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_2ADDR_check_zero 4802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 4803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_2ADDR_check_neg1 4804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial: 4805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 4806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 4807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial1: 4808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_2ADDR_continue 4809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG_2ADDR: /* 0xbf */ 4813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_LONG_2ADDR.S */ 4814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */ 4815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/2addr vA, vB */ 4816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax 4817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,%eax # eax<- B 4818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 4819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 4822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 4823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG2(%esp) 4824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 4825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_2ADDR_check_zero 4826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 4827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_2ADDR_check_neg1 4828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial: 4829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 4830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 4831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial1: 4832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_2ADDR_continue 4833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG_2ADDR: /* 0xc0 */ 4838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_LONG_2ADDR.S */ 4839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG_2ADDR: /* 0xc1 */ 4860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_LONG_2ADDR.S */ 4861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG_2ADDR: /* 0xc2 */ 4882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_LONG_2ADDR.S */ 4883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG_2ADDR: /* 0xc3 */ 4904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_LONG_2ADDR.S */ 4905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 4907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 4908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 4910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_HI<- BA 4915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 4917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,rINST_FULL,1) # edx<- v[AA+1] 4920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- vBB 4921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shldl %eax,%edx 4922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax 4923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edx 4926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 4927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,rINST_FULL,1) # v[AA+1]<- edx 4929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHL_LONG_2ADDR_finish 4931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG_2ADDR: /* 0xc4 */ 4935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_LONG_2ADDR.S */ 4936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 4938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 4939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 4941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_HI<- BA 4946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 4948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,rINST_FULL,1) # edx<- v[AA+1] 4951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- vBB 4952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%edx 4954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $31,%edx 4958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,rINST_FULL,1) # v[AA+1]<- edx 4960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHR_LONG_2ADDR_finish 4962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG_2ADDR: /* 0xc5 */ 4966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_LONG_2ADDR.S */ 4967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 4969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 4970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 4972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_HI<- BA 4977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 4979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,rINST_FULL,1) # edx<- v[AA+1] 4982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- vBB 4983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%edx 4985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %edx,%edx 4989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,rINST_FULL,1) # v[AA+1]<- edx 4991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_USHR_LONG_2ADDR_finish 4993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT_2ADDR: /* 0xc6 */ 4997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_FLOAT_2ADDR.S */ 4998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 4999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 5009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fadds (rFP,rINST_FULL,4) # ex: faddp 5011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 5014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT_2ADDR: /* 0xc7 */ 5020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_FLOAT_2ADDR.S */ 5021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 5032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fsubs (rFP,rINST_FULL,4) # ex: faddp 5034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 5037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT_2ADDR: /* 0xc8 */ 5043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_FLOAT_2ADDR.S */ 5044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 5055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fmuls (rFP,rINST_FULL,4) # ex: faddp 5057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 5060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT_2ADDR: /* 0xc9 */ 5066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_FLOAT_2ADDR.S */ 5067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 5078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fdivs (rFP,rINST_FULL,4) # ex: faddp 5080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 5083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT_2ADDR: /* 0xca */ 5089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_FLOAT_2ADDR.S */ 5090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float/2addr vA, vB */ 5091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # vBB to fp stack 5094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 5096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 5098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 5099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 5100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 5101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 5102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 5103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 5105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE_2ADDR: /* 0xcb */ 5110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_DOUBLE_2ADDR.S */ 5111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project faddl (rFP,rINST_FULL,4) # ex: faddp 5124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE_2ADDR: /* 0xcc */ 5133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_DOUBLE_2ADDR.S */ 5134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fsubl (rFP,rINST_FULL,4) # ex: faddp 5147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE_2ADDR: /* 0xcd */ 5156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_DOUBLE_2ADDR.S */ 5157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fmull (rFP,rINST_FULL,4) # ex: faddp 5170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE_2ADDR: /* 0xce */ 5179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_DOUBLE_2ADDR.S */ 5180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fdivl (rFP,rINST_FULL,4) # ex: faddp 5193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 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_REM_DOUBLE_2ADDR: /* 0xcf */ 5202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_DOUBLE_2ADDR.S */ 5203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float/2addr vA, vB */ 5204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # vBB to fp stack 5207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 5211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 5212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 5213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 5214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 5215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 5216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT16: /* 0xd0 */ 5223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_LIT16.S */ 5224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %ecx,%eax # for example: addl %ecx, %eax 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/* ------------------------------ */ 5249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT: /* 0xd1 */ 5251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RSUB_INT.S */ 5252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,%ecx # for example: addl %ecx, %eax 5270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,rINST_FULL) 5271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 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_MUL_INT_LIT16: /* 0xd2 */ 5279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_LIT16.S */ 5280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul/lit16 vA, vB, #+CCCC */ 5281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need A in rINST_FULL, ssssCCCC in ecx, vB in eax */ 5282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull %ecx,%eax # trashes rPC 5290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 5291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT16: /* 0xd3 */ 5299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_LIT16.S */ 5300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit16.S */ 5301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 5303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 5304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit16 vA, vB, #+CCCC */ 5306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need A in rINST_FULL, ssssCCCC in ecx, vB in eax */ 5307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT16_continue_div 5318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT16_continue_div 5320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 5321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_LIT16_finish_div 5322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT16: /* 0xd4 */ 5328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_LIT16.S */ 5329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit16.S */ 5330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 5332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 5333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit16 vA, vB, #+CCCC */ 5335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need A in rINST_FULL, ssssCCCC in ecx, vB in eax */ 5336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT16_continue_div 5347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT16_continue_div 5349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 5350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_LIT16_finish_div 5351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT16: /* 0xd5 */ 5357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_LIT16.S */ 5358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %ecx,%eax # for example: addl %ecx, %eax 5376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT16: /* 0xd6 */ 5385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_LIT16.S */ 5386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,%eax # for example: addl %ecx, %eax 5404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT16: /* 0xd7 */ 5414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_LIT16.S */ 5415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xor %ecx,%eax # for example: addl %ecx, %eax 5433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT8: /* 0xd8 */ 5442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_LIT8.S */ 5443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %ecx,%eax # ex: addl %ecx,%eax 5460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT_LIT8: /* 0xd9 */ 5469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RSUB_INT_LIT8.S */ 5470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,%ecx # ex: addl %ecx,%eax 5487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%ecx,rINST_FULL) 5488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT8: /* 0xda */ 5496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_LIT8.S */ 5497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul/lit8 vAA, vBB, #+CC */ 5498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull %ecx,%eax # trashes rPC 5504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 5505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT8: /* 0xdb */ 5514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_LIT8.S */ 5515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit8.S */ 5516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit div/rem "lit8" binary operation. Handles special case of 5518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op0=minint & op1=-1 5519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit8 vAA, vBB, #+CC */ 5521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT8_continue_div 5530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT8_continue_div 5532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 5533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_LIT8_finish_div 5534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT8: /* 0xdc */ 5540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_LIT8.S */ 5541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit8.S */ 5542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit div/rem "lit8" binary operation. Handles special case of 5544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op0=minint & op1=-1 5545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit8 vAA, vBB, #+CC */ 5547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT8_continue_div 5556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT8_continue_div 5558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 5559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_LIT8_finish_div 5560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT8: /* 0xdd */ 5566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_LIT8.S */ 5567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %ecx,%eax # ex: addl %ecx,%eax 5584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT8: /* 0xde */ 5593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_LIT8.S */ 5594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,%eax # ex: addl %ecx,%eax 5611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT8: /* 0xdf */ 5621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_LIT8.S */ 5622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xor %ecx,%eax # ex: addl %ecx,%eax 5639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_LIT8: /* 0xe0 */ 5648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT_LIT8.S */ 5649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: addl %ecx,%eax 5666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_LIT8: /* 0xe1 */ 5675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT_LIT8.S */ 5676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: addl %ecx,%eax 5693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_LIT8: /* 0xe2 */ 5702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT_LIT8.S */ 5703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: addl %ecx,%eax 5720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E3: /* 0xe3 */ 5729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_E3.S */ 5730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E4: /* 0xe4 */ 5737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_E4.S */ 5738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E5: /* 0xe5 */ 5745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_E5.S */ 5746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E6: /* 0xe6 */ 5753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_E6.S */ 5754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E7: /* 0xe7 */ 5761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_E7.S */ 5762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E8: /* 0xe8 */ 5769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_E8.S */ 5770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E9: /* 0xe9 */ 5777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_E9.S */ 5778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_EA: /* 0xea */ 5785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_EA.S */ 5786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_EB: /* 0xeb */ 5793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_EB.S */ 5794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_EC: /* 0xec */ 5801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_EC.S */ 5802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 58083a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden.L_OP_THROW_VERIFICATION_ERROR: /* 0xed */ 5809be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee/* File: x86/OP_THROW_VERIFICATION_ERROR.S */ 5810be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee /* 5811be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * Handle a throw-verification-error instruction. This throws an 5812be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * exception for an error discovered during verification. The 5813be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * exception is indicated by AA, with some detail provided by BBBB. 5814be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee */ 5815be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee /* op AA, ref@BBBB */ 5816b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden GET_GLUE(%ecx) 5817be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movzwl 2(rPC),%eax # eax<- BBBB 5818be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl offGlue_method(%ecx),%ecx # ecx<- glue->method 5819be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee EXPORT_PC() 5820be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 5821be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl %eax,OUT_ARG2(%esp) # arg2<- BBBB 5822be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl rINST_FULL,OUT_ARG1(%esp) # arg1<- AA 5823be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl %ecx,OUT_ARG0(%esp) # arg0<- method 5824be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee SPILL(rPC) 5825be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee call dvmThrowVerificationError # call(method, kind, ref) 5826be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee UNSPILL(rPC) 5827be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee jmp common_exceptionThrown # handle exception 5828be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee 5829be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee 5830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_EXECUTE_INLINE: /* 0xee */ 5833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_EXECUTE_INLINE.S */ 5834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Execute a "native inline" instruction. 5836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We will be calling through a function table: 5838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (*gDvmInlineOpsTable[opIndex].func)(arg0, arg1, arg2, arg3, pResult) 5840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* [opt] execute-inline vAA, {vC, vD, vE, vF}, inline@BBBB */ 5843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 5844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 5845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 5846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offGlue_retval(%ecx),%ecx # ecx<- & glue->retval 5847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG4(%esp) 5848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- arg count (0-4) 5849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call .LOP_EXECUTE_INLINE_continue # make call; will return after 5851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 5852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # successful? 5853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 5854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 5855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 5856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_EF: /* 0xef */ 5861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_EF.S */ 5862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_EMPTY: /* 0xf0 */ 5869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT_EMPTY.S */ 5870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * invoke-direct-empty is a no-op in a "standard" interpreter. 5872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 5874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 5875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_F1: /* 0xf1 */ 5880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_F1.S */ 5881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_QUICK: /* 0xf2 */ 5888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */ 5889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-quick */ 5890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 5891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 5892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 5894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 5895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 5896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 5897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%eax 5898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 5899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # rINST_FULL<- A 5902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,%ecx) # fp[A]<- result 5903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE_QUICK: /* 0xf3 */ 5908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_WIDE_QUICK.S */ 5909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-wide-quick */ 5910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 5911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 5912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 5914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 5915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 5916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 5917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of 64-bit source 5918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax),%ecx # ecx<- lsw 5919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%eax),%eax # eax<- msw 5920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 5921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) # v[A+0]<- lsw 5923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[A+1]<- msw 5924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT_QUICK: /* 0xf4 */ 5931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_OBJECT_QUICK.S */ 5932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */ 5933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-quick */ 5934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 5935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 5936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 5938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 5939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 5940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 5941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%eax 5942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 5943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # rINST_FULL<- A 5946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,%ecx) # fp[A]<- result 5947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_QUICK: /* 0xf5 */ 5953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_QUICK.S */ 5954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iput-quick, iput-object-quick */ 5955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 5956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 5957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 5959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 5960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 5962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 5963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # is object null? 5964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 5965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) 5966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE_QUICK: /* 0xf6 */ 5973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_WIDE_QUICK.S */ 5974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iput-wide-quick */ 5975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 5976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 5977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 5979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 5980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # is object null? 5981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 5982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%ecx # ecx<- Address of 64-bit target 5983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 5984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- lsw 5986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- msw 5987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(%ecx) 5988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4(%ecx) 5989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT_QUICK: /* 0xf7 */ 5996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_OBJECT_QUICK.S */ 5997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_QUICK.S */ 5998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iput-quick, iput-object-quick */ 5999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 6001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 6003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 6004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 6005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 6006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 6007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # is object null? 6008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) 6010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK: /* 0xf8 */ 6018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */ 6019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 6021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 6023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 6027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 6030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vC ("this" ptr) 6032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yep, throw exception 6034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- thisPtr->clazz 6035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable 6036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # might throw later - get ready 6037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[BBBB] 6038c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 6039c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 6040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK_RANGE: /* 0xf9 */ 6045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK_RANGE.S */ 6046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */ 6047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 6049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 6051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 6055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 6058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vC ("this" ptr) 6060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yep, throw exception 6062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- thisPtr->clazz 6063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable 6064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # might throw later - get ready 6065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[BBBB] 6066c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 6067c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 6068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK: /* 0xfa */ 6074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */ 6075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 6077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 6079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 6084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 6085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- D (or stays CCCC) 6087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 6090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super 6091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null "this"? 6092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # "this" is null, throw exception 6093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- vtable 6095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- super->vtable[BBBB] 6097c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 6098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK_RANGE: /* 0xfb */ 6103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK_RANGE.S */ 6104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */ 6105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 6107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 6109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 6114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 6115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- D (or stays CCCC) 6117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 6120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super 6121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null "this"? 6122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # "this" is null, throw exception 6123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- vtable 6125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- super->vtable[BBBB] 6127c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 6128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FC: /* 0xfc */ 6134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_FC.S */ 6135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 6136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 6137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FD: /* 0xfd */ 6142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_FD.S */ 6143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 6144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 6145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FE: /* 0xfe */ 6150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_FE.S */ 6151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 6152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 6153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FF: /* 0xff */ 6158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_FF.S */ 6159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 6160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 6161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size dvmAsmInstructionStart, .-dvmAsmInstructionStart 6166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmInstructionEnd 6167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionEnd: 6168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 6170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 6171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sister implementations 6172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 6173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmSisterStart 6175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmAsmSisterStart, %function 6176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 6177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 4 6178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterStart: 6179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_STRING */ 6181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* This is the less common path, so we'll redo some work 6183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project here rather than force spills on the common path */ 6184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_STRING_resolve: 6185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 6186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,rINST_FULL # rINST_FULL<- AA 6187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 6189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax 6191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveString # go resolve 6195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 6198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 6199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_STRING_JUMBO */ 6205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* This is the less common path, so we'll redo some work 6207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project here rather than force spills on the common path */ 6208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_STRING_JUMBO_resolve: 6209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 6210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,rINST_FULL # rINST_FULL<- AA 6211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 6213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBBBBB 6214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax 6215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveString # go resolve 6219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 6222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 6223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 6225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_CLASS */ 6229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* This is the less common path, so we'll redo some work 6231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project here rather than force spills on the common path */ 6232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_CLASS_resolve: 6233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 6234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,rINST_FULL # rINST_FULL<- AA 6235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 6237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,OUT_ARG2(%esp) # true 6238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax 6240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # go resolve 6244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 6247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 6248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MONITOR_ENTER */ 6254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MONITOR_ENTER_continue: 6256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # have to - caller save 6257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmLockObject # dvmLockObject(self,object) 6260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef WITH_DEADLOCK_PREDICTION 6262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlueSelf(%ecx),%ecx # ecx<- glue->self 6264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offThread_exception(%ecx),%eax 6265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 6266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne common_exceptionThrown 6267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 6268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 6269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MONITOR_EXIT */ 6272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MONITOR_EXIT_continue: 6274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmUnlockObject # unlock(self,obj) 6275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 6277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, exception pending 6279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 6280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CHECK_CAST */ 6283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 6286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds obj->clazz 6287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds class resolved from BBBB 6288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds object 6289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_fullcheck: 6291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInstanceofNonTrivial # eax<- boolean result 6295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_CHECK_CAST_okay # no, success 6298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # A cast has failed. We need to throw a ClassCastException with the 6300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # class of the object that failed to be cast. 6301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 6303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrClassCastException,%eax 6304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%ecx),%ecx 6305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- message 6306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- obj->clazz->descriptor 6307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowExceptionWithClassMessage 6309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path, and we're 6314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * going to have to recreate some data. 6315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds object 6317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolve: 6319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 6323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 6324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- metho->clazz 6325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 6326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 6327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- resolved ClassObject ptr 6329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 6331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yes, handle exception 6332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 6333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CHECK_CAST_resolved # pick up where we left off 6334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INSTANCE_OF */ 6336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 6339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds obj->clazz 6340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class resolved from BBBB 6341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_HI has BA 6342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC already spilled 6343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_fullcheck: 6345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInstanceofNonTrivial # eax<- boolean result 6348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # fall through to OP_INSTANCE_OF_store 6349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds boolean result 6352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_HI holds BA 6353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_store: 6355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 6357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecl<- A 6359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vA<- eax 6361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test succeeded, save and bail. 6365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds A 6366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_trivial: 6368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 6370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecl<- A 6372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%eax 6374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vA<- true 6375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 6379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC holds BBBB 6381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_HI holds BA 6382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolve: 6384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG1(%esp) # arg1<- BBBB 6385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx 6388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,OUT_ARG2(%esp) # arg2<- true 6389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 6392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- resolved ClassObject ptr 6393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Now, we need to sync up with fast path. We need eax to 6397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * hold the obj->clazz, and ecx to hold the resolved class 6398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved class 6400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 6401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 6402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB (obj) 6403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- obj->clazz 6404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INSTANCE_OF_resolved 6405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_NEW_INSTANCE */ 6408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_initialized: # on entry, ecx<- class 6410b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden /* TODO: remove test for interface/abstract, now done in verifier */ 6411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl $(ACC_INTERFACE|ACC_ABSTRACT),offClassObject_accessFlags(%ecx) 6412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG1(%esp) 6413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_INSTANCE_abstract 6414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_finish: # ecx=class 6415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocObject # eax<- new object 6417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 6419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, bail out 6422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 6423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class initialization required. 6428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class object 6430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_needinit: 6432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object 6433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInitClass # initialize class 6435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) # restore object 6436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_INSTANCE_initialized # success, continue 6438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) # failed, restore PC 6439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # go deal with init exception 6440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 6443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolve: 6446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 6448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 6449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) 6452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # call(clazz,off,flags) 6454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved ClassObject ptr 6455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # success? 6456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_INSTANCE_resolved # good to go 6457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 6459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6461b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden * TODO: remove this 6462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We can't instantiate an abstract class or interface, so throw an 6463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * InstantiationError with the class descriptor as the message. 6464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class object 6466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_abstract: 6468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%ecx),%eax 6469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrInstantiationError,OUT_ARG0(%esp) 6470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowExceptionWithClassMessage 6472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_NEW_ARRAY */ 6479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolve class. (This is an uncommon case.) 6482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class (null here) 6483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array length (vB) 6484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_ARRAY_resolve: 6486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%eax) # save array length 6488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 6489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- CCCC 6490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) 6493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 6496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx 6498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%eax) 6499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # successful resolution? 6500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, bail. 6501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# fall through to OP_NEW_ARRAY_finish 6502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Finish allocation 6505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class 6507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array length (vB) 6508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_ARRAY_finish: 6510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) 6513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocArrayByClass # eax<- call(clazz,length,flags) 6515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yup - go handle 6518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 6519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 6521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY */ 6526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_more: 6528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 6529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 6530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 6531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yes, handle it 6534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # note: fall through to .LOP_FILLED_NEW_ARRAY_continue 6536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 6539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array class [r0] 6540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds AA or BB [r10] 6541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is scratch 6542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC is valid, but has been spilled 6543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_continue: 6545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%eax),%ecx # ecx<- arrayClass->descriptor 6546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) # arg2<- flags 6547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 1(%ecx),%ecx # ecx<- descriptor[1] 6548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- arrayClass 6549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'I',%cl # supported? 6550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'L',%cl 6552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'[',%cl 6554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_notimpl # no, not handled yet 6555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 6556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(rINST_FULL) # save copy, need "B" later 6558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rINST_FULL 6559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,OUT_ARG1(%esp) # arg1<- A or AA (length) 6561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocArrayByClass # eax<- call(arrayClass, length, flags) 6562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # alloc successful? 6565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.l<- new array 6567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- FEDC or CCCC 6568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax),%eax # eax<- newArray->contents 6569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* at this point: 6571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax is pointer to tgt 6572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL is length 6573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is FEDC or CCCC 6574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL is BA 6575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC is valid, but spilled 6576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We now need to copy values from registers into the array 6577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # set up src pointer 6581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) # esi 6582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # edi 6583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edi # set up dst ptr 6584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),%esi # set up src ptr 6585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx # load count register 6586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rep 6588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsd 6589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 6591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 6592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 6593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 4f 6594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(rPC) 6595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0x0f,rPC # rPC<- 0000000A 6596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,rPC # rPC<- 000A0000 6597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,rPC # rpc<- 000AFEDC 6598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: 6599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 6600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx # ecx<- next reg to load 6601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 6602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,rPC 6603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal 4(%eax),%eax 6604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,-4(%eax) 6605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub $1,rINST_FULL 6606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 3b 6607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project4: 6608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 6613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception indicating that we have not implemented this 6618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mode of filled-new-array. 6619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_notimpl: 6621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrInternalError,%eax 6622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrFilledNewArrayNotImpl,%eax 6624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 6626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY_RANGE */ 6631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_more: 6633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 6634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 6635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 6636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yes, handle it 6639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # note: fall through to .LOP_FILLED_NEW_ARRAY_RANGE_continue 6641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 6644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array class [r0] 6645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds AA or BB [r10] 6646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is scratch 6647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC is valid, but has been spilled 6648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_continue: 6650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%eax),%ecx # ecx<- arrayClass->descriptor 6651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) # arg2<- flags 6652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 1(%ecx),%ecx # ecx<- descriptor[1] 6653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- arrayClass 6654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'I',%cl # supported? 6655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'L',%cl 6657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'[',%cl 6659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_RANGE_notimpl # no, not handled yet 6660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 6661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(rINST_FULL) # save copy, need "B" later 6663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rINST_FULL 6664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,OUT_ARG1(%esp) # arg1<- A or AA (length) 6666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocArrayByClass # eax<- call(arrayClass, length, flags) 6667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # alloc successful? 6670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.l<- new array 6672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- FEDC or CCCC 6673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax),%eax # eax<- newArray->contents 6674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* at this point: 6676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax is pointer to tgt 6677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL is length 6678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is FEDC or CCCC 6679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL is BA 6680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC is valid, but spilled 6681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We now need to copy values from registers into the array 6682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 6685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # set up src pointer 6686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) # esi 6687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # edi 6688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edi # set up dst ptr 6689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),%esi # set up src ptr 6690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx # load count register 6691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rep 6693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsd 6694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 6696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 6697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 6698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 4f 6699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(rPC) 6700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0x0f,rPC # rPC<- 0000000A 6701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,rPC # rPC<- 000A0000 6702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,rPC # rpc<- 000AFEDC 6703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: 6704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 6705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx # ecx<- next reg to load 6706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 6707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,rPC 6708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal 4(%eax),%eax 6709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,-4(%eax) 6710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub $1,rINST_FULL 6711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 3b 6712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project4: 6713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 6718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception indicating that we have not implemented this 6723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mode of filled-new-array. 6724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_notimpl: 6726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrInternalError,%eax 6727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrFilledNewArrayNotImpl,%eax 6729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 6731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPL_FLOAT */ 6736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_isNaN: 6738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $-1,%ecx 6739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPL_FLOAT_finish 6740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPG_FLOAT */ 6742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_isNaN: 6744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%ecx 6745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPG_FLOAT_finish 6746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPL_DOUBLE */ 6748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_isNaN: 6750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $-1,%ecx 6751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPL_DOUBLE_finish 6752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPG_DOUBLE */ 6754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_isNaN: 6756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%ecx 6757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPG_DOUBLE_finish 6758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMP_LONG */ 6760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_bigger: 6762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%ecx 6764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMP_LONG_finish 6765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_smaller: 6766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $-1,%ecx 6768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_finish: 6769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,rINST_FULL) 6770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_AGET_WIDE */ 6775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_AGET_WIDE_finish: 6777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,8),%eax 6778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax),%ecx 6779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%eax),%eax 6780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) 6781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) 6782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_APUT_WIDE */ 6788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_WIDE_finish: 6790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,8),%eax 6791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,0) 6792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) 6793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4(%eax) 6794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,(%eax) 6796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_APUT_OBJECT */ 6801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* On entry: 6803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax<- array object 6804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx<- index 6805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL<- vAA 6806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_OBJECT_continue: 6808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,4),%ecx 6809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # storing null reference? 6810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_APUT_OBJECT_skip_check 6811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) 6813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- arrayObj->clazz 6814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 6815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmCanPutArrayElement # test object type vs. array type 6818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 6821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errArrayStore 6822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_OBJECT_skip_check: 6824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx) 6825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET */ 6831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_resolve: 6834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 6837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 6839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 6840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 6841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 6842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 6845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_finish 6846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_finish: 6849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 6851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 6852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 6853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 6854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 6855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 6857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 6859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 6860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 6861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 6862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 6864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_WIDE */ 6869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_WIDE_resolve: 6872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 6875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 6877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 6878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 6879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 6880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 6883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_WIDE_finish 6884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_WIDE_finish: 6887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 6889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 6890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 6891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 6892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 6893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 6895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 6897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 6898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of field 6899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax),%ecx # ecx<- lsw 6900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%eax),%eax # eax<- msw 6901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) 6902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) 6903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_OBJECT */ 6909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_OBJECT_resolve: 6912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 6915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 6917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 6918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 6919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 6920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 6923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_OBJECT_finish 6924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_OBJECT_finish: 6927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 6929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 6930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 6931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 6932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 6933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 6935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 6937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 6938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 6939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 6940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 6942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_BOOLEAN */ 6947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BOOLEAN_resolve: 6950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 6953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 6955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 6956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 6957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 6958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 6961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BOOLEAN_finish 6962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BOOLEAN_finish: 6965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 6967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 6968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 6969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 6970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 6971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 6973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 6975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 6976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 6977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 6978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 6980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_BYTE */ 6985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BYTE_resolve: 6988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 6991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 6993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 6994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 6995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 6996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 6999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BYTE_finish 7000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BYTE_finish: 7003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 7016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 7018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_CHAR */ 7023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_CHAR_resolve: 7026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_CHAR_finish 7038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_CHAR_finish: 7041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 7054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 7056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_SHORT */ 7061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_SHORT_resolve: 7064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_SHORT_finish 7076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_SHORT_finish: 7079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 7092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 7094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT */ 7099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_resolve: 7102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_finish 7114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_finish: 7117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_WIDE */ 7135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_WIDE_resolve: 7138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_WIDE_finish 7150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_WIDE_finish: 7153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of field 7165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,0) # ecx<- lsw 7166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- msw 7167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4(%eax) 7168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,(%eax) 7170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_OBJECT */ 7174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_OBJECT_resolve: 7177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_OBJECT_finish 7189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_OBJECT_finish: 7192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_BOOLEAN */ 7210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BOOLEAN_resolve: 7213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_BOOLEAN_finish 7225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BOOLEAN_finish: 7228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb rINST_LO,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_BYTE */ 7246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BYTE_resolve: 7249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_BYTE_finish 7261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BYTE_finish: 7264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb rINST_LO,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_CHAR */ 7282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_CHAR_resolve: 7285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_CHAR_finish 7297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_CHAR_finish: 7300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw rINST,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_SHORT */ 7318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_SHORT_resolve: 7321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_SHORT_finish 7333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_SHORT_finish: 7336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw rINST,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET */ 7354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_resolve: 7359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_finish # success, continue 7371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_WIDE */ 7375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_resolve: 7380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_WIDE_finish # success, continue 7392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_OBJECT */ 7396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_resolve: 7401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_OBJECT_finish # success, continue 7413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_BOOLEAN */ 7417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_resolve: 7422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_BOOLEAN_finish # success, continue 7434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_BYTE */ 7438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_resolve: 7443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_BYTE_finish # success, continue 7455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_CHAR */ 7459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_resolve: 7464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_CHAR_finish # success, continue 7476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_SHORT */ 7480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_resolve: 7485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_SHORT_finish # success, continue 7497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT */ 7501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_resolve: 7506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_finish # success, continue 7518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_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_SPUT_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_SPUT_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 7542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_OBJECT */ 7543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_OBJECT_resolve: 7548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_OBJECT_finish # success, continue 7560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_BOOLEAN */ 7564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_resolve: 7569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_BOOLEAN_finish # success, continue 7581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_BYTE */ 7585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_resolve: 7590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_BYTE_finish # success, continue 7602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_CHAR */ 7606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_resolve: 7611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_CHAR_finish # success, continue 7623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_SHORT */ 7627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_resolve: 7632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_SHORT_finish # success, continue 7644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL */ 7648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_more: 7651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # ecx<- method->clazz 7652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 7653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags 7654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_continue # no, continue 7658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # yes, handle exception 7659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = resolved base method 7662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = scratch 7663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_continue: 7665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- GFED or CCCC 7666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 7667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%ecx # ecx<- D (or stays CCCC) 7668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- "this" 7670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%eax),%eax # eax<- baseMethod->methodIndex 7671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null this? 7672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # go if so 7673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%ecx),%ecx # ecx<- thisPtr->clazz 7674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable 7675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- vtable[methodIndex] 7676c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 7677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_SUPER */ 7680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 7683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method [r0] 7684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz [r9] 7685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_continue: 7687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%eax),%eax # eax<- method->clazz->super 7688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%ecx),%ecx # ecx<- baseMthod->methodIndex 7689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount) 7690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae .LOP_INVOKE_SUPER_nsm # method not present in superclass 7691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- ...clazz->super->vtable 7692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[methodIndex] 7693c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 7694c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 7695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = null (needs to be resolved base method) 7698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz 7699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_resolve: 7701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%eax) # method->clazz 7702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- method->clazz 7703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 7704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- resolver method type 7705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 7706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved base method 7711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%eax) # restore method->clazz 7712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_continue # good to go - continue 7713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # handle exception 7714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 7717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method 7718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_nsm: 7720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_name(%ecx),%eax 7721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov %eax,OUT_ARG1(%esp) 7722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNoSuchMethod 7723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_DIRECT */ 7725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 7728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL <- "this" register 7729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Things a bit ugly on this path, but it's the less 7730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * frequent one. We'll have to do some reloading. 7731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_resolve: 7733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) 7734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 7737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # reference (BBBB or CCCC) 7738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_DIRECT,OUT_ARG2(%esp) 7740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_DIRECT_finish 7746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_STATIC */ 7750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_STATIC_continue: 7752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_STATIC,%eax 7753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- flags 7754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # call(clazz,ref,flags) 7756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7758c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange 7759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_INTERFACE */ 7763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_INTERFACE_continue: 7765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex) 7766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 7769c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 7770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL_RANGE */ 7773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_RANGE_more: 7776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # ecx<- method->clazz 7777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 7778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags 7779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_RANGE_continue # no, continue 7783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # yes, handle exception 7784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = resolved base method 7787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = scratch 7788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_RANGE_continue: 7790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- GFED or CCCC 7791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 7792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%ecx # ecx<- D (or stays CCCC) 7793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- "this" 7795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%eax),%eax # eax<- baseMethod->methodIndex 7796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null this? 7797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # go if so 7798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%ecx),%ecx # ecx<- thisPtr->clazz 7799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable 7800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- vtable[methodIndex] 7801c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 7802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_SUPER_RANGE */ 7805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 7808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method [r0] 7809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz [r9] 7810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_continue: 7812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%eax),%eax # eax<- method->clazz->super 7813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%ecx),%ecx # ecx<- baseMthod->methodIndex 7814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount) 7815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae .LOP_INVOKE_SUPER_RANGE_nsm # method not present in superclass 7816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- ...clazz->super->vtable 7817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[methodIndex] 7818c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 7819c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 7820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = null (needs to be resolved base method) 7823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz 7824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_resolve: 7826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%eax) # method->clazz 7827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- method->clazz 7828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 7829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- resolver method type 7830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 7831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved base method 7836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%eax) # restore method->clazz 7837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_RANGE_continue # good to go - continue 7838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # handle exception 7839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 7842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method 7843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_nsm: 7845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_name(%ecx),%eax 7846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov %eax,OUT_ARG1(%esp) 7847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNoSuchMethod 7848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_DIRECT_RANGE */ 7850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 7853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL <- "this" register 7854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Things a bit ugly on this path, but it's the less 7855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * frequent one. We'll have to do some reloading. 7856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_resolve: 7858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) 7859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 7862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # reference (BBBB or CCCC) 7863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_DIRECT,OUT_ARG2(%esp) 7865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_DIRECT_RANGE_finish 7871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_STATIC_RANGE */ 7875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_STATIC_RANGE_continue: 7877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_STATIC,%eax 7878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- flags 7879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # call(clazz,ref,flags) 7881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7883c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange 7884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_INTERFACE_RANGE */ 7888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_INTERFACE_RANGE_continue: 7890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex) 7891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 7894c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 7895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FLOAT_TO_INT */ 7898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_continue: 7901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 7903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 7904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 7905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 7906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 7907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_FLOAT_TO_INT_special_case # fix up result 7909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_finish: 7911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 7912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_special_case: 7915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 7916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 7917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_FLOAT_TO_INT_isNaN 7918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 7919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 7921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_INT_finish 7923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_isNaN: 7924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 7925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 7927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_INT_finish 7929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FLOAT_TO_LONG */ 7931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_continue: 7934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 7935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 7936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 7937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 7938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 7939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 7940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_FLOAT_TO_LONG_special_case # fix up result 7942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_finish: 7944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 7945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_special_case: 7948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 7949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 7950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_FLOAT_TO_LONG_isNaN 7951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 7952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 7953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 7954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_finish 7956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_isNaN: 7957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 7958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 7959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 7960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_finish 7962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DOUBLE_TO_INT */ 7964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_continue: 7967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 7969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 7970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 7971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 7972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 7973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DOUBLE_TO_INT_special_case # fix up result 7975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_finish: 7977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 7978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_special_case: 7981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 7982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 7983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_DOUBLE_TO_INT_isNaN 7984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 7985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 7987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_finish 7989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_isNaN: 7990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 7991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 7993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_finish 7995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DOUBLE_TO_LONG */ 7997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_continue: 8000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 8002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 8003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 8004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 8006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DOUBLE_TO_LONG_special_case # fix up result 8008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_finish: 8010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_special_case: 8014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 8015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 8016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_DOUBLE_TO_LONG_isNaN 8017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 8018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 8020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_finish 8022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_isNaN: 8023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 8024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 8026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_finish 8028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT */ 8030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_continue_div: 8031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_finish_div: 8034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecl<- AA 8035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 8036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT */ 8042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_continue_div: 8043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_finish_div: 8046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecl<- AA 8047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%edx,%ecx) 8048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MUL_LONG */ 8054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MUL_LONG_continue: 8056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%edx),%edx # full result now in %edx:%eax 8057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A 8058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,4(rFP,%ecx,4) # v[B+1]<- %edx 8059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) # restore rPC/%edx 8060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 8062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(rFP,%ecx,4) # v[B]<- %eax 8063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_LONG */ 8068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_continue: 8070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __divdi3 8071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_finish: 8072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 8073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 8074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 8076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_check_zero: 8081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial 8083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_check_neg1: 8086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,%eax 8087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial 8088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 8089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 8090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial1 8092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial1 8094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%edx 8097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_finish 8098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_LONG */ 8103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_continue: 8105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __moddi3 8106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_finish: 8107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 8108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 8109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 8111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_check_zero: 8116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial 8118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_check_neg1: 8121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,%eax 8122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial 8123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 8124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 8125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial1 8127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial1 8129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 8132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_finish 8133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHL_LONG */ 8138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHL_LONG_finish: 8140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[AA+0]<- %eax 8141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHR_LONG */ 8145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHR_LONG_finish: 8148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[AA+0]<- eax 8149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_USHR_LONG */ 8153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_USHR_LONG_finish: 8156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[BB+0]<- eax 8157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT_2ADDR */ 8162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_2ADDR_continue_div2addr: 8163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_2ADDR_finish_div2addr: 8166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 8167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT_2ADDR */ 8173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_2ADDR_continue_div2addr: 8174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_2ADDR_finish_div2addr: 8177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%edx,rINST_FULL) 8178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MUL_LONG_2ADDR */ 8184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MUL_LONG_2ADDR_continue: 8186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%edx),%edx # full result now in %edx:%eax 8187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,4(rIBASE) # v[A+1]<- %edx 8188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) # restore rPC/%edx 8189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(rIBASE) # v[A]<- %eax 8191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 8192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 8193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_LONG_2ADDR */ 8198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_continue: 8200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 8201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) 8202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 8203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __divdi3 8204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_finish: 8205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 8206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 8207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 8209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_check_zero: 8214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial 8216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_check_neg1: 8219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,%eax 8220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial 8221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 8222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 8223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial1 8225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial1 8227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%edx 8230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_2ADDR_finish 8231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_LONG_2ADDR */ 8234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_continue: 8236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 8237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) 8238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 8239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __moddi3 8240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_finish: 8241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 8242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 8243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 8245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_check_zero: 8250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial 8252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_check_neg1: 8255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,%eax 8256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial 8257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 8258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 8259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial1 8261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial1 8263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 8266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_2ADDR_finish 8267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHL_LONG_2ADDR */ 8270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHL_LONG_2ADDR_finish: 8273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0]<- eax 8274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHR_LONG_2ADDR */ 8279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHR_LONG_2ADDR_finish: 8282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0]<- eax 8283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_USHR_LONG_2ADDR */ 8288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_USHR_LONG_2ADDR_finish: 8291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0]<- eax 8292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT_LIT16 */ 8297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT16_continue_div: 8298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT16_finish_div: 8301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 8302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT_LIT16 */ 8308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT16_continue_div: 8309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT16_finish_div: 8312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%edx,rINST_FULL) 8313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT_LIT8 */ 8319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT8_continue_div: 8320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT8_finish_div: 8323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 8324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT_LIT8 */ 8330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT8_continue_div: 8331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT8_finish_div: 8334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%edx,rINST_FULL) 8335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_EXECUTE_INLINE */ 8341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_EXECUTE_INLINE_continue: 8343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Extract args, call function. 8345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = #of args (0-4) 8346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = call index 8347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @esp = return addr 8348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * esp is -4 from normal 8349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go ahead and load all 4 args, even if not used. 8351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rPC 8353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx 8356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 8357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rPC 8358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG0(%esp) 8359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx 8362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 8363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rPC 8364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG1(%esp) 8365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx 8368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 8369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rPC 8370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG2(%esp) 8371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx 8374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 8375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rPC 8376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG3(%esp) 8377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $4,%eax # index *= sizeof(table entry) 8379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp *gDvmInlineOpsTable(%eax) 8380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # will return to caller of .LOP_EXECUTE_INLINE_continue 8381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size dvmAsmSisterStart, .-dvmAsmSisterStart 8384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmSisterEnd 8385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterEnd: 8386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/entry.S */ 8388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 8390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 8392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 8393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 8394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 8396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 8398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 8399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 8401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 8402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 8406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdRun 8407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdRun, %function 8408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bool dvmMterpStdRun(MterpGlue* glue) 8410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interpreter entry point. Returns changeInterp. 8412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdRun: 8415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebp 8416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %esp,%ebp 8417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %edi 8418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %esi 8419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebx 8420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* at this point, stack is misaligned by 1 word 8422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project We're allocating spill space for 6 words, plus 8423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project outgoing argument (5 words) and local variables 8424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (4 words) - 15 words or 60 bytes total. See 8425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project diagram in header.S 8426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 8427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl $60,%esp 8428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Set up "named" registers */ 8430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl IN_ARG0(%ebp),%ecx 8431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,rGLUE_SPILL(%ebp) 8432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_PC_FROM_GLUE(%ecx) 8433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_FP_FROM_GLUE(%ecx) 8434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $dvmAsmInstructionStart,rIBASE 8435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Remember %esp for future "longjmp" */ 8437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %esp,offGlue_bailPtr(%ecx) 8438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* How to start? */ 8440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb offGlue_entryPoint(%ecx),%al 8441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Normal start? */ 8443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryInstr,%al 8444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .Lnot_instr 8445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Normal case: start executing the instruction at rPC */ 8447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 8448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lnot_instr: 8451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Reset to normal case */ 8452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $kInterpEntryInstr,offGlue_entryPoint(%ecx) 8453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryReturn,%al 8454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_returnFromMethod 8455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryThrow,%al 8456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 8457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx %al,%eax 8458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrBadEntryPoint,OUT_ARG0(%esp) 8460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call printf 8461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAbort 8462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Not reached */ 8463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdBail 8466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdBail, %function 8467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * void dvmMterpStdBail(MterpGlue* glue, bool changeInterp) 8469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Restore the stack pointer and PC from the save point established on entry. 8471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is essentially the same as a longjmp, but should be cheaper. The 8472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * last instruction causes us to return to whoever called dvmMterpStdRun. 8473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We're not going to build a standard frame here, so the arg accesses will 8475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * look a little strange. 8476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * esp+4 (arg0) MterpGlue* glue 8479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * esp+8 (arg1) bool changeInterp 8480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdBail: 8482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%esp),%ecx # grab glue 8483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 8(%esp),%eax # changeInterp to return reg 8484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_bailPtr(%ecx),%esp # Stack back to normal 8485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl $60,%esp # Strip dvmMterpStdRun's frame 8486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %ebx 8487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %esi 8488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %edi 8489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %ebp 8490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ret # return to dvmMterpStdRun's caller 8491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Strings 8495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .section .rodata 8497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrBadEntryPoint: 8498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Bad entry point %d\n" 8499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/footer.S */ 8501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 8503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 8505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 8506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 8507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 8509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 8511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 8512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 8514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 8515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common subroutines and data. 8518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code when a backwards branch is taken 8522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ebx (a.k.a. rINST_FULL) -> PC adjustment in 16-bit words 8525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_backwardBranch: 8527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 8528c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch call common_periodicChecks # Note: expects rPC to be preserved 8529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(rINST_FULL) 8530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 8531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8533c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8534c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8535c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch/* 8536c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Common code for method invocation with range. 8537c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * 8538c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * On entry: 8539c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * eax = Method* methodToCall 8540c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * rINST trashed, must reload 8541c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8542c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8543c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodRange: 8544c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewRange: 8545c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8546c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8547c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * prepare to copy args to "outs" area of current frame 8548c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8549c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8550c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzbl 1(rPC),rINST_FULL # rINST_FULL<- AA 8551c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl 4(rPC), %ecx # %ecx<- CCCC 8552c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SPILL(rPC) 8553c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%edx,rFP) # %edx<- &StackSaveArea 8554c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch test rINST_FULL, rINST_FULL 8555c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rINST_FULL, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- AA 8556c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jz .LinvokeArgsDone # no args; jump to args done 8557c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8558c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8559c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8560c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, %ecx=CCCC, LOCAL0_OFFSET(%ebp)=count, %edx=&outs (&stackSaveArea) 8561c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * (very few methods have > 10 args; could unroll for common cases) 8562c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8563c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8564c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ebx, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- save %ebx 8565c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea (rFP, %ecx, 4), %ecx # %ecx<- &vCCCC 8566c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shll $2, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- offset 8567c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl LOCAL0_OFFSET(%ebp), %edx # %edx<- update &outs 8568c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shrl $2, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- offset 8569c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1: 8570c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (%ecx), %ebx # %ebx<- vCCCC 8571c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%ecx), %ecx # %ecx<- &vCCCC++ 8572c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl $1, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET<- LOCAL0_OFFSET-- 8573c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ebx, (%edx) # *outs<- vCCCC 8574c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%edx), %edx # outs++ 8575c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne 1b # loop if count (LOCAL0_OFFSET(%ebp)) not zero 8576c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ebx # %ebx<- restore %ebx 8577c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp .LinvokeArgsDone # continue 8578c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8579c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8580c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax is "Method* methodToCall", the method we're trying to call 8581c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * prepare to copy args to "outs" area of current frame 8582c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8583c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8584c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodNoRange: 8585c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewNoRange: 8586c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzbl 1(rPC),rINST_FULL # rINST_FULL<- BA 8587c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SPILL(rPC) 8588c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rINST_FULL, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- BA 8589c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shrl $4, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- B 8590c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je .LinvokeArgsDone # no args; jump to args done 8591c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl 4(rPC), %ecx # %ecx<- GFED 8592c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%edx,rFP) # %edx<- &StackSaveArea 8593c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8594c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8595c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, %ecx=GFED, LOCAL0_OFFSET(%ebp)=count, %edx=outs 8596c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8597c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8598c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNonRange: 8599c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $2, LOCAL0_OFFSET(%ebp) # compare LOCAL0_OFFSET(%ebp) to 2 8600c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- GFED 8601c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl 1f # handle 1 arg 8602c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je 2f # handle 2 args 8603c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $4, LOCAL0_OFFSET(%ebp) # compare LOCAL0_OFFSET(%ebp) to 4 8604c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl 3f # handle 3 args 8605c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je 4f # handle 4 args 8606c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch5: 8607c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch andl $15, rINST_FULL # rINST<- A 8608c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 8609c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, rINST_FULL, 4), %ecx # %ecx<- vA 8610c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vA 8611c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 8612c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch4: 8613c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $12, %ecx # %ecx<- G 8614c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 8615c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vG 8616c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vG 8617c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 8618c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch3: 8619c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x0f00, %ecx # %ecx<- 0F00 8620c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $8, %ecx # %ecx<- F 8621c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 8622c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vF 8623c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vF 8624c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 8625c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch2: 8626c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x00f0, %ecx # %ecx<- 00E0 8627c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $4, %ecx # %ecx<- E 8628c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 8629c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vE 8630c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vE 8631c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 8632c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1: 8633c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x000f, %ecx # %ecx<- 000D 8634c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vD 8635c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, -4(%edx) # *--outs<- vD 8636c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch0: 8637c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8638c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8639c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax is "Method* methodToCall", the method we're trying to call 8640c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * find space for the new stack frame, check for overflow 8641c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8642c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8643c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeArgsDone: 8644c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl offMethod_registersSize(%eax), %edx # %edx<- methodToCall->regsSize 8645c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl offMethod_outsSize(%eax), %ecx # %ecx<- methodToCall->outsSize 8646c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET<- methodToCall 8647c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shl $2, %edx # %edx<- update offset 8648c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%eax,rFP) # %eax<- &StackSaveArea 8649c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl %edx, %eax # %eax<- newFP; (old savearea - regsSize) 8650c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%edx) # %edx<- pMterpGlue 8651c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- &outs 8652c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl $sizeofStackSaveArea, %eax # %eax<- newSaveArea (stack save area using newFP) 8653c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_interpStackEnd(%edx), %edx # %edx<- glue->interpStackEnd 8654c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, LOCAL2_OFFSET(%ebp) # LOCAL2_OFFSET<- glue->interpStackEnd 8655c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shl $2, %ecx # %ecx<- update offset for outsSize 8656c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, %edx # %edx<- newSaveArea 8657c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch sub %ecx, %eax # %eax<- bottom; (newSaveArea - outsSize) 8658c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp LOCAL2_OFFSET(%ebp), %eax # compare interpStackEnd and bottom 8659c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL0_OFFSET(%ebp), %eax # %eax<- restore methodToCall 8660c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl .LstackOverflow # handle frame overflow 8661c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8662c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8663c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * set up newSaveArea 8664c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8665c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8666c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#ifdef EASY_GDB 8667c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%ecx,rFP) # %ecx<- &StackSaveArea 8668c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, offStackSaveArea_prevSave(%edx) # newSaveArea->prevSave<- &outs 8669c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#endif 8670c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offStackSaveArea_prevFrame(%edx) # newSaveArea->prevFrame<- rFP 8671c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rPC_SPILL(%ebp), %ecx 8672c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, offStackSaveArea_savedPc(%edx) # newSaveArea->savedPc<- rPC 8673c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch testl $ACC_NATIVE, offMethod_accessFlags(%eax) # check for native call 8674c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, offStackSaveArea_method(%edx) # newSaveArea->method<- method to call 8675c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne .LinvokeNative # handle native call 8676c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8677c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8678c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Update "glue" values for the new method 8679c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFp 8680c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8681c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8682c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offMethod_clazz(%eax), %edx # %edx<- method->clazz 8683c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%ecx) # %ecx<- pMterpGlue 8684c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offClassObject_pDvmDex(%edx), %edx # %edx<- method->clazz->pDvmDex 8685c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, offGlue_method(%ecx) # glue->method<- methodToCall 8686c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, offGlue_methodClassDex(%ecx) # glue->methodClassDex<- method->clazz->pDvmDex 8687c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offMethod_insns(%eax), rPC # rPC<- methodToCall->insns 8688c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%ecx), %eax # %eax<- glue->self 8689c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), rFP # rFP<- newFP 8690c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offThread_curFrame(%eax) # glue->self->curFrame<- newFP 8691c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch FETCH_INST() 8692c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GOTO_NEXT # jump to methodToCall->insns 8693c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8694c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8695c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Prep for the native call 8696c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFP, %edx=newSaveArea 8697c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8698c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8699c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNative: 8700c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%ecx) # %ecx<- pMterpGlue 8701c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, OUT_ARG1(%esp) # push parameter methodToCall 8702c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%ecx), %ecx # %ecx<- glue->self 8703c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offThread_jniLocal_nextEntry(%ecx), %eax # %eax<- glue->self->thread->refNext 8704c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, offStackSaveArea_localRefTop(%edx) # newSaveArea->localRefTop<- refNext 8705c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, OUT_ARG4(%esp) # save newSaveArea 8706c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %edx # %edx<- newFP 8707c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, offThread_curFrame(%ecx) # glue->self->curFrame<- newFP 8708c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, OUT_ARG3(%esp) # save glue->self 8709c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, OUT_ARG2(%esp) # push parameter glue->self 8710c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%ecx) # %ecx<- pMterpGlue 8711c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG1(%esp), %eax # %eax<- methodToCall 8712c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea offGlue_retval(%ecx), %ecx # %ecx<- &retval 8713c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, OUT_ARG0(%esp) # push parameter pMterpGlue 8714c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch push %edx # push parameter newFP 8715c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8716c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch call *offMethod_nativeFunc(%eax) # call methodToCall->nativeFunc 8717c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%esp), %esp 8718c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG4(%esp), %ecx # %ecx<- newSaveArea 8719c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG3(%esp), %eax # %eax<- glue->self 8720c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offStackSaveArea_localRefTop(%ecx), %edx # %edx<- newSaveArea->localRefTop 8721c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $0, offThread_exception(%eax) # check for exception 8722c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offThread_curFrame(%eax) # glue->self->curFrame<- rFP 8723c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, offThread_jniLocal_nextEntry(%eax) # glue->self<- newSaveArea->localRefTop 8724c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch UNSPILL(rPC) 8725c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_exceptionThrown # handle exception 8726c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch FETCH_INST_WORD(3) 8727c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch ADVANCE_PC(3) 8728c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GOTO_NEXT # jump to next instruction 8729c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8730c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LstackOverflow: 8731c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%eax) # %eax<- pMterpGlue 8732c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%eax), %eax # %eax<- glue->self 8733c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, OUT_ARG0(%esp) # push parameter self 8734c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch call dvmHandleStackOverflow # call: (Thread* self) 8735c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch UNSPILL(rPC) # return: void 8736c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_exceptionThrown # handle exception 8737c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8738c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common invoke code (old-style). 8741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TUNING: Rewrite along lines of new armv5 code? 8742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = Method* methodToCall 8745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = bool methodCallRange 8746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST trashed, must reload 8747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_invokeOld: 8749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- methodCallRange 8750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 8751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl (rPC),rINST_FULL # recover rINST 8752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- method 8753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 8754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_TO_GLUE(%ecx) 8755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_FP_TO_GLUE(%ecx) 8756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 8757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,OUT_ARG3(%esp)# arg3<- AA 8758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- GLUE 8759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG4(%esp) # arg4<- GFED/CCCC 8760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmMterp_invokeMethod 8761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_resumeAfterGlueCall 8762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Do we need the thread to be suspended or have debugger/profiling activity? 8766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ebx -> PC adjustment in 16-bit words (must be preserved) 8769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx -> GLUE pointer 8770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: A call will normally kill %eax, rPC/%edx and %ecx. To 8772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * streamline the normal case, this routine will preserve rPC and 8773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * %ecx in addition to the normal caller save regs. The save/restore 8774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is a bit ugly, but will happen in the relatively uncommon path. 8775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TUNING: Might be worthwhile to inline this. 8776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: Basic-block style Jit will need a hook here as well. Fold it into 8777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the suspendCount check so we can get both in 1 shot. 8778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_periodicChecks: 8780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_pSelfSuspendCount(%ecx),%eax # eax <- &suspendCount 8781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(%eax) 8782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 8783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) || defined(WITH_PROFILER) 8785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) 8786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_pDebuggerActive(%ecx),%eax # eax <- &DebuggerActive 8787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 8788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_PROFILER) 8789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_pActiveProfilers(%ecx),%ecx # ecx <- &ActiveProfilers 8790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 8791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) && defined(WITH_PROFILER) 8792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl (%eax),%eax # eax <- debuggerActive (boolean) 8793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (%ecx),%eax # eax <- debuggerActive || activeProfilers 8794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#elif defined(WITH_DEBUGGER) 8795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl (%eax),%eax # eax <- debuggerActive (boolean) 8796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#elif defined(WITH_PROFILER) 8797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx),%eax # eax <= activeProfilers 8798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 8799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) # restore rGLUE 8800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 8801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 3f # one or both active - switch interp 8802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 8803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ret 8805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Check for suspend */ 8807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 8808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point, the return pointer to the caller of 8809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * common_periodicChecks is on the top of stack. We need to preserve 8810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC(edx) and GLUE(ecx). We'll spill rPC, and reload GLUE. 8811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The outgoing profile is: 8812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bool dvmCheckSuspendPending(Thread* self) 8813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Because we reached here via a call, go ahead and build a new frame. 8814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 881599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project EXPORT_PC() # need for precise GC 8816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%eax # eax<- glue->self 8817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # save edx 8818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebp 8819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %esp,%ebp 8820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl $24,%esp 8821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmCheckSuspendPending 8823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl $24,%esp 8824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %ebp 8825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 8827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ret 8828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Switch interpreters */ 8830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Note: %ebx contains the 16-bit word offset to be applied to rPC to 8831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "complete" the interpretation of backwards branches. In effect, we 8832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * are completing the interpretation of the branch instruction here, 8833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and the new interpreter will resume interpretation at the branch 8834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * target. However, a switch request recognized during the handling 8835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * of a return from method instruction results in an immediate abort, 8836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and the new interpreter will resume by re-interpreting the return 8837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction. 8838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: 8840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ebx,2),rPC # adjust pc to show target 8841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) # bail expect GLUE already loaded 8842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,rINST_FULL # set changeInterp to true 8843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_gotoBail 8844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for handling a return instruction 8848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_returnFromMethod: 8850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 8851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Set entry mode in case we bail */ 8852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $kInterpEntryReturn,offGlue_entryPoint(%ecx) 8853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl rINST_FULL,rINST_FULL # zero offset in case we switch interps 8854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call common_periodicChecks # Note: expects %ecx to be preserved 8855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(%eax,rFP) # eax<- saveArea (old) 8857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStackSaveArea_prevFrame(%eax),rFP # rFP<- prevFrame 8858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (offStackSaveArea_method-sizeofStackSaveArea)(rFP),rINST_FULL 8859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,rINST_FULL # break? 8860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_gotoBail # break frame, bail out completely 8861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStackSaveArea_savedPc(%eax),rPC # pc<- saveArea->savedPC 8863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%eax # eax<- self 8864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,offGlue_method(%ecx) # glue->method = newSave->meethod 8865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rFP,offThread_curFrame(%eax) # self->curFrame = fp 8866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rINST_FULL),%eax # eax<- method->clazz 8867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 8868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_pDvmDex(%eax),%eax # eax<- method->clazz->pDvmDex 8869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 8870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_methodClassDex(%ecx) 8871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* not bailing - restore entry mode to default */ 8872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $kInterpEntryInstr,offGlue_entryPoint(%ecx) 8873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Prepare to strip the current frame and "longjump" back to caller of 8877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * dvmMterpStdRun. 8878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on entry: 8880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds changeInterp 8881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds glue pointer 8882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected profile: dvmMterpStdBail(MterpGlue *glue, bool changeInterp) 8884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_gotoBail: 8886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_TO_GLUE(%ecx) # export state to glue 8887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_FP_TO_GLUE(%ecx) 8888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # glue in arg0 8889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,OUT_ARG1(%esp) # changeInterp in arg1 8890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmMterpStdBail # bail out.... 8891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * After returning from a "glued" function, pull out the updated values 8895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and start executing at the next instruction. 8896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project common_resumeAfterGlueCall: 8898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 8899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_PC_FROM_GLUE(%ecx) 8900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_FP_FROM_GLUE(%ecx) 8901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 8902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Integer divide or mod by zero 8906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errDivideByZero: 8908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrArithmeticException,%eax 8910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrDivideByZero,%eax 8912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 8914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 8915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size. 8920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNegativeArraySize: 8922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNegativeArraySizeException,%eax 8924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 8928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 8929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size. 8934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNoSuchMethod: 8936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNoSuchMethodError,%eax 8939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 8943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 8944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Hit a null object when we weren't expecting one. Export the PC, throw a 8949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * NullPointerException and goto the exception processing code. 8950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNullObject: 8952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNullPointerException,%eax 8954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 8958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 8959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array index exceeds max. 8964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayIndex: 8966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrArrayIndexException,%eax 8968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 8972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 8973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Invalid array value. 8977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayStore: 8979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrArrayStoreException,%eax 8981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 8985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 8986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Somebody has thrown an exception. Handle it. 8991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the exception processing code returns to us (instead of falling 8993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out of the interpreter), continue with whatever the next instruction 8994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * now happens to be. 8995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This does not return. 8997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_exceptionThrown: 8999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 9000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_TO_GLUE(%ecx) 9001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_FP_TO_GLUE(%ecx) 9002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 9003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmMterp_exceptionThrown 9004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_resumeAfterGlueCall 9005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_abort: 9007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xdeadf00d,%eax 9008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call *%eax 9009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Strings 9013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .section .rodata 9016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNullPointerException: 9017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NullPointerException;" 9018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArithmeticException: 9019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArithmeticException;" 9020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrDivideByZero: 9021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "divide by zero" 9022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArrayIndexException: 9023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArrayIndexOutOfBoundsException;" 9024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArrayStoreException: 9025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArrayStoreException;" 9026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNegativeArraySizeException: 9027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NegativeArraySizeException;" 9028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInstantiationError: 9029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InstantiationError;" 9030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrClassCastException: 9031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ClassCastException;" 9032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNoSuchMethodError: 9033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NoSuchMethodError;" 9034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInternalError: 9035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InternalError;" 9036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrFilledNewArrayNotImpl: 9037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "filled-new-array only implemented for 'int'" 9038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9040