InterpAsm-x86.S revision 7365493ad8d360c1dcf9cd8b6eee62747af01cae
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This file was generated automatically by gen-mterp.py for 'x86'. 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * --> DO NOT EDIT <-- 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/header.S */ 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit x86 definitions and declarations. 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project386 ABI general notes: 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectCaller save set: 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eax, edx, ecx, st(0)-st(7) 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectCallee save set: 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ebx, esi, edi, ebp 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectReturn regs: 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 32-bit in eax 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 64-bit in edx:eax (low-order 32 in eax) 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fp on top of fp stack st(0) 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectParameters passed on stack, pushed right-to-left. On entry to target, first 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectparm is at 4(%esp). Traditional entry code is: 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectfunctEntry: 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebp # save old frame pointer 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov %ebp,%esp # establish new frame pointer 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub FrameSize,%esp # Allocate storage for spill, locals & outs 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOnce past the prologue, arguments are referenced at ((argno + 2)*4)(%ebp) 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectAlignment of stack not strictly required, but should be for performance. We'll 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectalign frame sizes to 16-byte multiples. 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectIf we're not doing variable stack allocation (alloca), the frame pointer can be 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecteliminated and all arg references adjusted to be esp relative. 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectMterp notes: 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectSome key interpreter variables will be assigned to registers. Note that each 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectwill also have an associated spill location (mostly used useful for those assigned 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectto callee save registers). 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project nick reg purpose 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rPC edx interpreted program counter, used for fetching instructions 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rFP esi interpreted frame pointer, used for accessing locals and args 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rIBASE edi Base pointer for instruction dispatch computed goto 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rINST bx first 16-bit code of current instruction 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rOPCODE bl opcode portion of instruction word 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rINST_HI bh high byte of instruction word, usually contains src/tgt reg names 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectNotes: 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project o High order 16 bits of ebx must be zero on entry to handler 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project o rPC, rFP, rIBASE, rINST/rOPCODE valid on handler entry and exit 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project o eax and ecx are scratch, rINST/ebx sometimes scratch 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project o rPC is in the caller save set, and will be killed across external calls. Don't 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project forget to SPILL/UNSPILL it around call points 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rPC %edx 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rFP %esi 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rIBASE %edi 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rINST_FULL %ebx 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rINST %bx 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rINST_HI %bh 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rINST_LO %bl 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rOPCODE %bl 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Frame diagram while executing dvmMterpStdRun, high to low addresses */ 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define IN_ARG0 ( 8) 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define CALLER_RP ( 4) 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define PREV_FP ( 0) /* <- dvmMterpStdRun ebp */ 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Spill offsets relative to %ebp */ 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define EDI_SPILL ( -4) 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define ESI_SPILL ( -8) 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define EDX_SPILL (-12) /* <- esp following dmMterpStdRun header */ 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rPC_SPILL (-16) 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rFP_SPILL (-20) 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rGLUE_SPILL (-24) 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rIBASE_SPILL (-28) 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rINST_FULL_SPILL (-32) 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define TMP_SPILL (-36) 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL0_OFFSET (-40) 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL1_OFFSET (-44) 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL2_OFFSET (-48) 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL3_OFFSET (-52) 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Out Arg offsets, relative to %sp */ 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG4 ( 16) 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG3 ( 12) 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG2 ( 8) 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG1 ( 4) 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG0 ( 0) /* <- dvmMterpStdRun esp */ 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SPILL(reg) movl reg##,reg##_SPILL(%ebp) 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define UNSPILL(reg) movl reg##_SPILL(%ebp),reg 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SPILL_TMP(reg) movl reg,TMP_SPILL(%ebp) 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define UNSPILL_TMP(reg) movl TMP_SPILL(%ebp),reg 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* save/restore the PC and/or FP from the glue struct */ 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOAD_PC_FROM_GLUE(_glu) movl offGlue_pc(_glu),rPC 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVE_PC_TO_GLUE(_glu) movl rPC,offGlue_pc(_glu) 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOAD_FP_FROM_GLUE(_glu) movl offGlue_fp(_glu),rFP 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVE_FP_TO_GLUE(_glu) movl rFP,offGlue_fp(_glu) 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GET_GLUE(_reg) movl rGLUE_SPILL(%ebp),_reg 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* The interpreter assumes a properly aligned stack on entry, and 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * will preserve 16-byte alignment. 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "export" the PC to the interpreted stack frame, f/b/o future exception 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * objects. Must * be done *before* something calls dvmThrowException. 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "SAVEAREA_FROM_FP(fp)->xtra.currentPc = pc", i.e. 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fp - sizeof(StackSaveArea) + offsetof(SaveArea, xtra.currentPc) 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * It's okay to do this more than once. 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define EXPORT_PC() \ 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC, (-sizeofStackSaveArea + offStackSaveArea_currentPc)(rFP) 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Given a frame pointer, find the stack save area. 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "((StackSaveArea*)(_fp) -1)". 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SAVEAREA_FROM_FP(_reg, _fpreg) \ 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal -sizeofStackSaveArea(_fpreg),_reg 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch the next instruction from rPC into rINST. Does not advance rPC. 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_INST() movzwl (rPC),rINST_FULL 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch the nth instruction word from rPC into rINST. Does not advance 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC, and _count is in words 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_INST_WORD(_count) movzwl _count*2(rPC),rINST_FULL 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fetch instruction word indexed (used for branching). 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Index is in instruction word units. 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define FETCH_INST_INDEXED(_reg) movzwl (rPC,_reg,2),rINST_FULL 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Extract the opcode of the instruction in rINST 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define EXTRACT_OPCODE(_reg) movzx rOPCODE,_reg 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Advance rPC by instruction count 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define ADVANCE_PC(_count) leal 2*_count(rPC),rPC 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Advance rPC by branch offset in register 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define ADVANCE_PC_INDEXED(_reg) leal (rPC,_reg,2),rPC 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: assumes opcode previously fetched and in rINST, and 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * %eax is killable at this point. 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if 1 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.macro GOTO_NEXT 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For computed next version */ 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rOPCODE,%eax 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $6,%eax 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl rIBASE,%eax 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp *%eax 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#else 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For jump table version */ 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.macro GOTO_NEXT 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rOPCODE,%eax 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp *(rIBASE,%eax,4) 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get/set the 32-bit value from a Dalvik register. 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GET_VREG(_reg, _vreg) movl (rFP,_vreg,4),_reg 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SET_VREG(_reg, _vreg) movl _reg,(rFP,_vreg,4) 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define GET_VREG_WORD(_reg, _vreg, _offset) movl 4*(_offset)(rFP,_vreg,4),_reg 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SET_VREG_WORD(_reg, _vreg, _offset) movl _reg,4*(_offset)(rFP,_vreg,4) 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is a #include, not a %include, because we want the C pre-processor 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to expand the macros into assembler assignment statements. 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "../common/asm-constants.h" 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmInstructionStart 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmAsmInstructionStart, %function 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionStart = .L_OP_NOP 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOP: /* 0x00 */ 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOP.S */ 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE: /* 0x01 */ 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $12,rINST_FULL # rINST_FULL<- B 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) # fp[A]<-fp[B] 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_FROM16: /* 0x02 */ 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */ 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%eax # eax <= AA 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw 2(rPC),rINST # rINST <= BBBB 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,rINST_FULL) # ecx<- fp[BBBB] 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%ecx,%eax) # fp[AA]<- ecx] 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_16: /* 0x03 */ 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_16.S */ 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE: /* 0x04 */ 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE.S */ 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide vA, vB */ 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx <- BA 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rinst_FULL<- B 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[B+0] 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- v[B+1] 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rINST_FULL,%ecx,1) # v[A+1]<- rINST_FULL 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[A+0]<- eax 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_FROM16: /* 0x05 */ 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE_FROM16.S */ 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/from16 vAA, vBBBB */ 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- AAAA 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,%ecx,0) # rINST_FULL<- v[BBBB+0] 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[BBBB+1] 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rINST_FULL,%eax,0) # v[AAAA+0]<- rINST_FULL 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,%eax,1) # v[AAAA+1]<- eax 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_16: /* 0x06 */ 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE_16.S */ 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/16 vAAAA, vBBBB */ 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,%ecx,0) # rINST_WORD<- v[BBBB+0] 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[BBBB+1] 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rINST_FULL,%eax,0) # v[AAAA+0]<- rINST_FULL 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,%eax,1) # v[AAAA+1]<- ecx 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT: /* 0x07 */ 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT.S */ 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $12,rINST_FULL # rINST_FULL<- B 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) # fp[A]<-fp[B] 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_FROM16: /* 0x08 */ 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_FROM16.S */ 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */ 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%eax # eax <= AA 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw 2(rPC),rINST # rINST <= BBBB 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,rINST_FULL) # ecx<- fp[BBBB] 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%ecx,%eax) # fp[AA]<- ecx] 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_16: /* 0x09 */ 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_16.S */ 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_16.S */ 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT: /* 0x0a */ 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */ 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) # eax<- rGLUE 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- AA 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_retval(%eax),%eax # eax<- glue->retval.l 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,%ecx) # fp[AA]<- retval.l 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_WIDE: /* 0x0b */ 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT_WIDE.S */ 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-result-wide vAA */ 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_retval(%ecx),%eax 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4+offGlue_retval(%ecx),%ecx 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0] <- eax 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,1) # v[AA+1] <- ecx 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_OBJECT: /* 0x0c */ 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT_OBJECT.S */ 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */ 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) # eax<- rGLUE 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- AA 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_retval(%eax),%eax # eax<- glue->retval.l 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,%ecx) # fp[AA]<- retval.l 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_EXCEPTION: /* 0x0d */ 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_EXCEPTION.S */ 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-exception vAA */ 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offThread_exception(%ecx),%eax # eax<- dvmGetException bypass 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) # fp[AA]<- exception object 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,offThread_exception(%ecx) # dvmClearException bypass 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_VOID: /* 0x0e */ 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_VOID.S */ 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN: /* 0x0f */ 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN.S */ 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.i <- AA 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_WIDE: /* 0x10 */ 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_WIDE.S */ 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 64-bit value. Copies the return value into the "glue" 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* return-wide vAA */ 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- v[AA+1] 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4+offGlue_retval(%ecx) 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_OBJECT: /* 0x11 */ 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_OBJECT.S */ 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN.S */ 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.i <- AA 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_4: /* 0x12 */ 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_4.S */ 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/4 vA, #+B */ 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsx rINST_HI,%eax # eax<-ssssssBx 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %eax,%ecx # ecx<- A 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_16: /* 0x13 */ 508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_16.S */ 509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/16 vAA, #+BBBB */ 510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssBBBB 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%eax # eax<- AA 512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) # vAA<- ssssBBBB 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST: /* 0x14 */ 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST.S */ 521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const vAA, #+BBBBbbbb */ 522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # grab all 32 bits at once 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- eax 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_HIGH16: /* 0x15 */ 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_HIGH16.S */ 533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/high16 vAA, #+BBBB0000 */ 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- 0000BBBB 535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,%eax # eax<- BBBB0000 539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- eax 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_16: /* 0x16 */ 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_16.S */ 546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/16 vAA, #+BBBB */ 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%eax # eax<- ssssBBBB 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # rPC:eax<- ssssssssssssBBBB 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) # store msw 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # store lsw 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_32: /* 0x17 */ 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_32.S */ 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/32 vAA, #+BBBBbbbb */ 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # eax<- BBBBbbbb 564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # rPC:eax<- ssssssssssssBBBB 568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) # store msw 569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # store lsw 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE: /* 0x18 */ 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE.S */ 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide vAA, #+HHHHhhhhBBBBbbbb */ 579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # eax<- lsw 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx <- AA 581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 6(rPC),rINST_FULL # rINST_FULL<- msw 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),%ecx # dst addr 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4(%ecx) 584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(5) 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(%ecx) 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(5) 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_HIGH16: /* 0x19 */ 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_HIGH16.S */ 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/high16 vAA, #+BBBB000000000000 */ 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- 0000BBBB 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,%eax # eax<- BBBB0000 599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,1) # v[AA+1]<- eax 600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[AA+0]<- eax 602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING: /* 0x1a */ 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_STRING.S */ 608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBB */ 610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings 615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResString[BBBB] 616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_STRING_resolve 620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- rResString[BBBB] 621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING_JUMBO: /* 0x1b */ 627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_STRING_JUMBO.S */ 628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBBBBBB */ 630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # eax<- BBBBBBBB 632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings 635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResString[BBBB] 636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_STRING_JUMBO_resolve 640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- rResString[BBBB] 641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_CLASS: /* 0x1c */ 647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_CLASS.S */ 648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/class vAA, Class@BBBB */ 650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- dvmDex->pResClasses 655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResClasses[BBBB] 656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_CLASS_resolve 660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vAA<- rResClasses[BBBB] 661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_ENTER: /* 0x1d */ 667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MONITOR_ENTER.S */ 668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Synchronize on an object. 670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-enter vAA */ 672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 67899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project EXPORT_PC() # need for precise GC, MONITOR_TRACKING 679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_MONITOR_ENTER_continue 680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_EXIT: /* 0x1e */ 685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MONITOR_EXIT.S */ 686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlock an object. 688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Exceptions that occur when unlocking a monitor need to appear as 690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if they happened at the following instruction. See the Dalvik 691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction spec. 692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-exit vAA */ 694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) 696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 699668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee je .LOP_MONITOR_EXIT_errNullObject # go if so 700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MONITOR_EXIT_continue 705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CHECK_CAST: /* 0x1f */ 709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CHECK_CAST.S */ 710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if a cast from one class to another is allowed. 712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* check-cast vAA, class@BBBB */ 714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- vAA (object) 717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # is oject null? 720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CHECK_CAST_okay # null obj, cast always succeeds 722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved class 723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # have we resolved this before? 725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CHECK_CAST_resolve # no, go do it now 726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolved: 727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl %eax,%ecx # same class (trivial success)? 728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_CHECK_CAST_fullcheck # no, do full check 729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_okay: 730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INSTANCE_OF: /* 0x20 */ 737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INSTANCE_OF.S */ 738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if an object reference is an instance of a class. 740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Most common situation is a non-null object, being compared against 742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an already-resolved class. 743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* instance-of vA, vB, class@CCCC */ 745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB (obj) 748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # object null? 750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_store # null obj, not instance, store it 753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rPC # rPC<- CCCC 754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,rPC,4),%ecx # ecx<- resolved class 756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- obj->clazz 757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # have we resolved this before? 758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_resolve # not resolved, do it now 759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolved: # eax<- obj->clazz, ecx<- resolved class 760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl %eax,%ecx # same class (trivial success)? 761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_trivial # yes, trivial finish 762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INSTANCE_OF_fullcheck # no, do full check 763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ARRAY_LENGTH: /* 0x21 */ 767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ARRAY_LENGTH.S */ 768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the length of an array. 770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) # ecx<- vB (object ref) 774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # is null? 776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_length(%ecx),%ecx 779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_INSTANCE: /* 0x22 */ 786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEW_INSTANCE.S */ 787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new instance of a class. 789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-instance vAA, class@BBBB */ 791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved class 798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # resolved? 800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_NEW_INSTANCE_resolve # no, go do it 801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolved: # on entry, ecx<- class 802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $CLASS_INITIALIZED,offClassObject_status(%ecx) 803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_NEW_INSTANCE_initialized 804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_NEW_INSTANCE_needinit 805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_ARRAY: /* 0x23 */ 809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEW_ARRAY.S */ 810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Allocate an array of objects, specified with the array class 812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and a count. 813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The verifier guarantees that this is an array class, so we don't 815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check for it here. 816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-array vA, vB, class@CCCC */ 818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- CCCC 822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved class 824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax 825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB (array length) 827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_errNegativeArraySize # bail 831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_ARRAY_finish # yes, fast path 833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_NEW_ARRAY_resolve # resolve now 834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY: /* 0x24 */ 838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */ 839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA or BA 848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%eax),%eax # eax<- pDvmDex->pResClasses 851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved class 853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_continue # yes, continue 856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # less frequent path, so we'll redo some work 857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- BBBB 860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FILLED_NEW_ARRAY_more 862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY_RANGE: /* 0x25 */ 866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY_RANGE.S */ 867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */ 868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA or BA 877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%eax),%eax # eax<- pDvmDex->pResClasses 880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved class 882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_RANGE_continue # yes, continue 885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # less frequent path, so we'll redo some work 886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- BBBB 889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FILLED_NEW_ARRAY_RANGE_more 891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILL_ARRAY_DATA: /* 0x26 */ 896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILL_ARRAY_DATA.S */ 897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* fill-array-data vAA, +BBBBBBBB */ 898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) 902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandleFillArrayData 907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # exception thrown? 910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_THROW: /* 0x27 */ 917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_THROW.S */ 918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception object in the current thread. 920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* throw vAA */ 922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 9238ba2708ea118381f2df5ca55b9bad2ae4c050504Andy McFadden EXPORT_PC() 924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- exception object 926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offThread_exception(%ecx) # thread->exception<- obj 930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO: /* 0x28 */ 935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO.S */ 936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 8-bit offset. 938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset, which we need to 940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * double to get a byte offset. 941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto +AA */ 943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl rINST_HI,rINST_FULL # ebx<- ssssssAA 944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # test for <0 945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_16: /* 0x29 */ 954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO_16.S */ 955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 16-bit offset. 957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset 959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/16 +AAAA */ 961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # rINST_FULL<- ssssAAAA 962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # test for <0 963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_32: /* 0x2a */ 972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO_32.S */ 973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 32-bit offset. 975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset. 977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlike most opcodes, this one is allowed to branch to itself, so 979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * our "backward branch" test must be "<=0" instead of "<0". 980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/32 AAAAAAAA */ 982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),rINST_FULL # rINST_FULL<- AAAAAAAA 983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,rINST_FULL # test for <= 0 984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle common_backwardBranch 985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_PACKED_SWITCH: /* 0x2b */ 993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */ 994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # ARG1<- vAA 1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # ARG0<- switchData 1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandlePackedSwitch 1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,rINST_FULL # set up word offset 1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle common_backwardBranch # check on special actions 1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(rINST_FULL) 1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPARSE_SWITCH: /* 0x2c */ 1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPARSE_SWITCH.S */ 1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */ 1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 1037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # ARG1<- vAA 1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # ARG0<- switchData 1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandleSparseSwitch 1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,rINST_FULL # set up word offset 1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle common_backwardBranch # check on special actions 1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(rINST_FULL) 1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_FLOAT: /* 0x2d */ 1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPL_FLOAT.S */ 1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPL_FLOAT_isNaN 1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPL_FLOAT_finish 1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPL_FLOAT_finish 1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_finish: 1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_FLOAT: /* 0x2e */ 1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_FLOAT.S */ 1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPG_FLOAT_isNaN 1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPG_FLOAT_finish 1109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPG_FLOAT_finish 1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_finish: 1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_DOUBLE: /* 0x2f */ 1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPL_DOUBLE.S */ 1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPL_DOUBLE_isNaN 1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPL_DOUBLE_finish 1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPL_DOUBLE_finish 1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_finish: 1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_DOUBLE: /* 0x30 */ 1154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPG_DOUBLE_isNaN 1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPG_DOUBLE_finish 1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPG_DOUBLE_finish 1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_finish: 1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 1179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMP_LONG: /* 0x31 */ 1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMP_LONG.S */ 1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two 64-bit values. Puts 0, 1, or -1 into the destination 1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * register based on the results of the comparison. 1189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* cmp-long vAA, vBB, vCC */ 1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 1193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),rPC # rPC<- CC 1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,1) # eax<- v[BB+1] 1195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,0) # ecx<- v[BB+0] 1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl 4(rFP,rPC,4),%eax 1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl .LOP_CMP_LONG_smaller 1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg .LOP_CMP_LONG_bigger 1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub (rFP,rPC,4),%ecx 1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ja .LOP_CMP_LONG_bigger 1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMP_LONG_smaller 1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMP_LONG_finish 1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQ: /* 0x32 */ 1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_EQ.S */ 1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NE: /* 0x33 */ 1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_NE.S */ 1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 1258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LT: /* 0x34 */ 1271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LT.S */ 1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jge 1f 1289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GE: /* 0x35 */ 1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GE.S */ 1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl 1f 1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GT: /* 0x36 */ 1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GT.S */ 1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle 1f 1351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LE: /* 0x37 */ 1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LE.S */ 1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- A+ 1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx <- A 1376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%ecx) # eax <- vA 1377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 1378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl (rFP,rINST_FULL,4),%eax # compare (vA, vB) 1379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # Get signed branch offset 1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume not taken 1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg 1f 1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQZ: /* 0x38 */ 1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_EQZ.S */ 1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NEZ: /* 0x39 */ 1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_NEZ.S */ 1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LTZ: /* 0x3a */ 1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LTZ.S */ 1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jge 1f 1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GEZ: /* 0x3b */ 1476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GEZ.S */ 1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl 1f 1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GTZ: /* 0x3c */ 1503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GTZ.S */ 1504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle 1f 1518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LEZ: /* 0x3d */ 1530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LEZ.S */ 1531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx <- AA 1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(rFP,%ecx,4) # compare (vA, 0) 1542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),rINST_FULL # fetch signed displacement 1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $2,%eax # assume branch not taken 1544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg 1f 1545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 1546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax 1548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_INDEXED(%eax) 1550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(%eax) 1551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3E: /* 0x3e */ 1557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_3E.S */ 1558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3F: /* 0x3f */ 1565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_3F.S */ 1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_40: /* 0x40 */ 1573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_40.S */ 1574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_41: /* 0x41 */ 1581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_41.S */ 1582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_42: /* 0x42 */ 1589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_42.S */ 1590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_43: /* 0x43 */ 1597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_43.S */ 1598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET: /* 0x44 */ 1605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_contents(%eax,%ecx,4),%eax 1622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_WIDE: /* 0x45 */ 1631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_WIDE.S */ 1632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 64 bits. vAA <- vBB[vCC]. 1634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_AGET_WIDE_finish # index < length, OK 1646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errArrayIndex # index >= length, bail 1647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_OBJECT: /* 0x46 */ 1651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_OBJECT.S */ 1652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_contents(%eax,%ecx,4),%eax 1669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BOOLEAN: /* 0x47 */ 1679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_BOOLEAN.S */ 1680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl offArrayObject_contents(%eax,%ecx,1),%eax 1697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BYTE: /* 0x48 */ 1707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_BYTE.S */ 1708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl offArrayObject_contents(%eax,%ecx,1),%eax 1725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_CHAR: /* 0x49 */ 1735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_CHAR.S */ 1736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offArrayObject_contents(%eax,%ecx,2),%eax 1753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_SHORT: /* 0x4a */ 1763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_SHORT.S */ 1764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl offArrayObject_contents(%eax,%ecx,2),%eax 1781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 1782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 1784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT: /* 0x4b */ 1791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,4),%eax 1808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,(%eax) 1811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_WIDE: /* 0x4c */ 1817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_WIDE.S */ 1818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 64 bits. vBB[vCC]<-vAA. 1820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_APUT_WIDE_finish # index < length, OK 1832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errArrayIndex # index >= length, bail 1833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_OBJECT: /* 0x4d */ 1837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_OBJECT.S */ 1838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- vAA 1850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_APUT_OBJECT_continue 1854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errArrayIndex # index >= length, bail 1855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BOOLEAN: /* 0x4e */ 1859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_BOOLEAN.S */ 1860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,1),%eax 1877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb %cl,(%eax) 1880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BYTE: /* 0x4f */ 1887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_BYTE.S */ 1888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,1),%eax 1905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb %cl,(%eax) 1908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_CHAR: /* 0x50 */ 1915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_CHAR.S */ 1916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,2),%eax 1933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %cx,(%eax) 1936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_SHORT: /* 0x51 */ 1943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_SHORT.S */ 1944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 1945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 1947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 1949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 1954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB (array object) 1955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecs<- vCC (requested index) 1956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae common_errArrayIndex # index >= length, bail 1960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,2),%eax 1961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 1962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 1963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %cx,(%eax) 1964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 1965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET: /* 0x52 */ 1971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 1972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 1974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 1976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 1978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 1979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 1980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 1981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 1982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 1983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 1984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 1985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 1986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 1987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 1988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 1989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 1990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_finish # no, already resolved 1991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 1992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 1993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_resolve 1994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE: /* 0x53 */ 1998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_WIDE.S */ 1999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit instance field get. 2001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_WIDE_finish # no, already resolved 2017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_WIDE_resolve 2020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT: /* 0x54 */ 2024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_OBJECT.S */ 2025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_OBJECT_finish # no, already resolved 2045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_OBJECT_resolve 2048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BOOLEAN: /* 0x55 */ 2053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_BOOLEAN.S */ 2054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BOOLEAN_finish # no, already resolved 2074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_BOOLEAN_resolve 2077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BYTE: /* 0x56 */ 2082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_BYTE.S */ 2083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BYTE_finish # no, already resolved 2103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_BYTE_resolve 2106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_CHAR: /* 0x57 */ 2111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_CHAR.S */ 2112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_CHAR_finish # no, already resolved 2132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_CHAR_resolve 2135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_SHORT: /* 0x58 */ 2140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_SHORT.S */ 2141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_SHORT_finish # no, already resolved 2161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) # needed by dvmResolveInstField 2162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_SHORT_resolve 2164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT: /* 0x59 */ 2169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_finish # no, already resolved 2190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_resolve 2193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE: /* 0x5a */ 2197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_WIDE.S */ 2198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit instance field put. 2200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_WIDE_finish # no, already resolved 2216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_WIDE_resolve 2219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT: /* 0x5b */ 2223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_OBJECT.S */ 2224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_OBJECT_finish # no, already resolved 2245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_OBJECT_resolve 2248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BOOLEAN: /* 0x5c */ 2253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_BOOLEAN.S */ 2254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_BOOLEAN_finish # no, already resolved 2275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_BOOLEAN_resolve 2278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BYTE: /* 0x5d */ 2283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_BYTE.S */ 2284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_BYTE_finish # no, already resolved 2305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_BYTE_resolve 2308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_CHAR: /* 0x5e */ 2313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_CHAR.S */ 2314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_CHAR_finish # no, already resolved 2335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_CHAR_resolve 2338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_SHORT: /* 0x5f */ 2343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_SHORT.S */ 2344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # need another reg 2354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),rIBASE # rIBASE<- 0000CCCC 2355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 2357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 2358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 2360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 2361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- fp[B], the object ptr 2362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,rIBASE,4),%eax # resolved entry 2363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # is resolved entry null? 2364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_SHORT_finish # no, already resolved 2365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rIBASE,OUT_ARG1(%esp) 2366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rIBASE) 2367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_SHORT_resolve 2368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET: /* 0x60 */ 2373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_resolve # if not, make it so 2387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_finish: # field ptr in eax 2388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_WIDE: /* 0x61 */ 2398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_WIDE.S */ 2399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit SGET handler. 2401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* sget-wide vAA, field@BBBB */ 2404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_WIDE_resolve # if not, make it so 2411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_finish: # field ptr in eax 2412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%ecx # ecx<- lsw 2413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4+offStaticField_value(%eax),%eax # eax<- msw 2414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 2415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) 2416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) 2417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_OBJECT: /* 0x62 */ 2424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_OBJECT.S */ 2425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_OBJECT_resolve # if not, make it so 2439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_finish: # field ptr in eax 2440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BOOLEAN: /* 0x63 */ 2451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_BOOLEAN.S */ 2452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_BOOLEAN_resolve # if not, make it so 2466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_finish: # field ptr in eax 2467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BYTE: /* 0x64 */ 2478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_BYTE.S */ 2479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_BYTE_resolve # if not, make it so 2493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_finish: # field ptr in eax 2494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_CHAR: /* 0x65 */ 2505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_CHAR.S */ 2506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_CHAR_resolve # if not, make it so 2520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_finish: # field ptr in eax 2521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_SHORT: /* 0x66 */ 2532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_SHORT.S */ 2533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_SHORT_resolve # if not, make it so 2547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_finish: # field ptr in eax 2548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 2553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT: /* 0x67 */ 2559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_resolve # if not, make it so 2573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_finish: # field ptr in eax 2574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_WIDE: /* 0x68 */ 2584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_WIDE.S */ 2585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_WIDE_resolve # if not, make it so 2598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_WIDE_finish: # field ptr in eax 2599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,%ecx,0) # rINST_FULL<- lsw 2601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- msw 2602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,offStaticField_value(%eax) 2603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+offStaticField_value(%eax) 2606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_OBJECT: /* 0x69 */ 2611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_OBJECT.S */ 2612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_OBJECT_resolve # if not, make it so 2626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_OBJECT_finish: # field ptr in eax 2627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BOOLEAN: /* 0x6a */ 2638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_BOOLEAN.S */ 2639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_BOOLEAN_resolve # if not, make it so 2653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_finish: # field ptr in eax 2654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BYTE: /* 0x6b */ 2665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_BYTE.S */ 2666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_BYTE_resolve # if not, make it so 2680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_finish: # field ptr in eax 2681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_CHAR: /* 0x6c */ 2692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_CHAR.S */ 2693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_CHAR_resolve # if not, make it so 2707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_finish: # field ptr in eax 2708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_SHORT: /* 0x6d */ 2719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_SHORT.S */ 2720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_SHORT_resolve # if not, make it so 2734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_finish: # field ptr in eax 2735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 2736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 2737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 2738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 2740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 2741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL: /* 0x6e */ 2746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */ 2747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 2750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 2752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 2756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 2757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 2758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%eax),%eax # eax<- pDvmDex->pResMethods 2760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved baseMethod 2761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 2762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_continue # yes, continue 2763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 2764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 2765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 2766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_VIRTUAL_more 2768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER: /* 0x6f */ 2772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */ 2773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 2775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 2777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rINST_FULL) 2781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(rINST_FULL),%ecx # ecx<- pDvmDex 2783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved baseMethod 2786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rINST_FULL),%eax # eax<- method 2787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rINST_FULL # rINST_FULL<- GFED or CCCC 2788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 2789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,rINST_FULL # rINST_FULL<- D (or stays CCCC) 2790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- "this" ptr 2792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # null "this"? 2793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, throw 2794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 2795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 2796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_continue # yes - go on 2797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_SUPER_resolve 2798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT: /* 0x70 */ 2802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */ 2803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 2805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 2807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 2808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 2809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 2810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/range 2812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 2818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rPC # rPC<- GFED or CCCC 2822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 2823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 2824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,rPC # rPC<- D (or stays CCCC) 2825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 2827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rPC) # ecx<- "this" ptr 2828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INVOKE_DIRECT_resolve # not resolved, do it now 2829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_finish: 2830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 2831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null "this"? 2832c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange # no, continue on 2833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 2834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC: /* 0x71 */ 2838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */ 2839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 2841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 2843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 2849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 2852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 2853c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange 2854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 2856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 2857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 2858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 2859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 2860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_STATIC_continue 2861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE: /* 0x72 */ 2865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */ 2866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 2868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 2870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 2874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 2876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 2877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 2879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null this? 2881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, fail 2882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax# eax<- thisPtr->clazz 2883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- class 2884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- methodClassDex 2885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- method 2886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) # arg3<- dex 2887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG2(%esp) # arg2<- method 2889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 2890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_INTERFACE_continue 2892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_73: /* 0x73 */ 2896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_73.S */ 2897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 2898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 2899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_RANGE: /* 0x74 */ 2904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_RANGE.S */ 2905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */ 2906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 2909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 2911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 2915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 2916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 2917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%eax),%eax # eax<- pDvmDex->pResMethods 2919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved baseMethod 2920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 2921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_RANGE_continue # yes, continue 2922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 2923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 2924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 2925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_VIRTUAL_RANGE_more 2927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_RANGE: /* 0x75 */ 2932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_RANGE.S */ 2933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */ 2934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 2936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 2938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(rINST_FULL) 2942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(rINST_FULL),%ecx # ecx<- pDvmDex 2944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved baseMethod 2947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rINST_FULL),%eax # eax<- method 2948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rINST_FULL # rINST_FULL<- GFED or CCCC 2949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 2950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,rINST_FULL # rINST_FULL<- D (or stays CCCC) 2951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- "this" ptr 2953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # null "this"? 2954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, throw 2955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 2956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 2957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_RANGE_continue # yes - go on 2958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_SUPER_RANGE_resolve 2959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_RANGE: /* 0x76 */ 2964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT_RANGE.S */ 2965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */ 2966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 2968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 2970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 2971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 2972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 2973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/range 2975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 2977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 2978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 2979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 2980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 2981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 2982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 2983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 2984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rPC # rPC<- GFED or CCCC 2985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 2986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 2987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,rPC # rPC<- D (or stays CCCC) 2988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 2989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 2990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rPC) # ecx<- "this" ptr 2991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INVOKE_DIRECT_RANGE_resolve # not resolved, do it now 2992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_finish: 2993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 2994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null "this"? 2995c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange # no, continue on 2996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 2997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC_RANGE: /* 0x77 */ 3002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC_RANGE.S */ 3003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */ 3004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 3006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 3008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 3012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 3014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 3015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 3017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 3018c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange 3019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 3020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 3021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 3022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 3023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 3025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_STATIC_RANGE_continue 3026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE_RANGE: /* 0x78 */ 3031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE_RANGE.S */ 3032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */ 3033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 3035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 3037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 3041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 3042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 3044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 3046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 3047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null this? 3048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, fail 3049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax# eax<- thisPtr->clazz 3050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- class 3051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- methodClassDex 3052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- method 3053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) # arg3<- dex 3054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG2(%esp) # arg2<- method 3056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_INTERFACE_RANGE_continue 3059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_79: /* 0x79 */ 3064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_79.S */ 3065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 3066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 3067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_7A: /* 0x7a */ 3072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_7A.S */ 3073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 3074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 3075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_INT: /* 0x7b */ 3080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_INT.S */ 3081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 30937365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 30947365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %eax 3096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 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_NOT_INT: /* 0x7c */ 3103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOT_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) 31167365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 31177365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %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_NEG_LONG: /* 0x7d */ 3126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_LONG.S */ 3127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 3129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 3130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # ecx<- BA 3131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 3132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 3133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[B+1] 3134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %eax 3135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $0,%ecx 3136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %ecx 3137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[A+0]<- eax 3138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,1) # v[A+1]<- ecx 3139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_LONG: /* 0x7e */ 3146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOT_LONG.S */ 3147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 3149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 3150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # ecx<- BA 3151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 3152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 3153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[B+1] 3154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %eax 3155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %ecx 3156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[A+0]<- eax 3157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,1) # v[A+1]<- ecx 3158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_FLOAT: /* 0x7f */ 3165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_FLOAT.S */ 3166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fchs 3178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 3179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_DOUBLE: /* 0x80 */ 3185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_DOUBLE.S */ 3186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fchs 3198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 3199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_LONG: /* 0x81 */ 3205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_LONG.S */ 3206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* int to long vA, vB */ 3207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- +A 3208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # will step on edx later 3211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # edx:eax<- sssssssBBBBBBBB 3213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[A+1]<- edx/rPC 3214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[A+0]<- %eax 3216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_FLOAT: /* 0x82 */ 3223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_FLOAT.S */ 3224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fildl (rFP,rINST_FULL,4) # %st0<- vB 3232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 32357365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 3237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_DOUBLE: /* 0x83 */ 3243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_DOUBLE.S */ 3244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fildl (rFP,rINST_FULL,4) # %st0<- vB 3252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 32557365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 3257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_INT: /* 0x84 */ 3263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_INT.S */ 3264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* we ignore the high word, making this equivalent to a 32-bit reg move */ 3265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 3266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 3267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 3268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 3269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 3270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $12,rINST_FULL # rINST_FULL<- B 3271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,rINST_FULL) 3272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 3274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) # fp[A]<-fp[B] 3275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_FLOAT: /* 0x85 */ 3281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_FLOAT.S */ 3282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fildll (rFP,rINST_FULL,4) # %st0<- vB 3290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 32937365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 3295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_DOUBLE: /* 0x86 */ 3301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_DOUBLE.S */ 3302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fildll (rFP,rINST_FULL,4) # %st0<- vB 3310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 33137365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 3315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_INT: /* 0x87 */ 3321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_INT.S */ 3322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_INT_continue 3353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_LONG: /* 0x88 */ 3358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_LONG.S */ 3359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_continue 3390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_DOUBLE: /* 0x89 */ 3395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_DOUBLE.S */ 3396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 34077365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # vA<- %st0 3409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_INT: /* 0x8a */ 3415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_INT.S */ 3416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_continue 3447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_LONG: /* 0x8b */ 3452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_LONG.S */ 3453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # %st0<- vB 3468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_continue 3484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_FLOAT: /* 0x8c */ 3489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_FLOAT.S */ 3490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # %st0<- vB 3498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 35017365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # vA<- %st0 3503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_BYTE: /* 0x8d */ 3509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_BYTE.S */ 3510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A+ 3517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 3518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 3519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 3521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 35227365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 35237365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl %al,%eax 3525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 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_CHAR: /* 0x8e */ 3532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_CHAR.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) 35457365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 35467365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl %ax,%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_SHORT: /* 0x8f */ 3555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_SHORT.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) 35687365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 35697365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl %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_ADD_INT: /* 0x90 */ 3578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT.S */ 3579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT: /* 0x91 */ 3604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_INT.S */ 3605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT: /* 0x92 */ 3630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT.S */ 3631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary multiplication. 3633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul vAA, vBB, vCC */ 3635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP,%ecx,4),%eax # trashes rPC/edx 3640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT: /* 0x93 */ 3650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT.S */ 3651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv.S */ 3652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 3655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 3656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 3664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 3665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 3666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_continue_div 3667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 3668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_continue_div 3669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 3670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_finish_div 3671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT: /* 0x94 */ 3677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT.S */ 3678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv.S */ 3679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 3682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 3683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 3691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 3692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 3693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_continue_div 3694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 3695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_continue_div 3696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 3697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_finish_div 3698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT: /* 0x95 */ 3704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT.S */ 3705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT: /* 0x96 */ 3730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT.S */ 3731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 3747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 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_XOR_INT: /* 0x97 */ 3756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_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 xorl (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 .balign 64 3781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT: /* 0x98 */ 3782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT.S */ 3783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 3784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 3786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 3787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: addl %ecx,%eax 3794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # tmp<- AA 3795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT: /* 0x99 */ 3804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT.S */ 3805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 3806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 3808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 3809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: addl %ecx,%eax 3816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # tmp<- AA 3817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT: /* 0x9a */ 3826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT.S */ 3827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 3828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 3830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 3831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vBB 3836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 3837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: addl %ecx,%eax 3838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # tmp<- AA 3839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 3842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG: /* 0x9b */ 3848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_LONG.S */ 3849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 3850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 3852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 3859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 3860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 3861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 3862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 3863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 3864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 3866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG: /* 0x9c */ 3874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_LONG.S */ 3875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 3876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 3878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 3885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 3886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 3887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 3888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 3889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 3890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 3891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 3892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 3893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 3894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 3895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG: /* 0x9d */ 3900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_LONG.S */ 3901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply. 3903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We could definately use more free registers for 3905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this code. We must spill rPC (edx) because it 3906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is used by imul. We'll also spill rINST (ebx), 3907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * giving us eax, ebc, ecx and edx as computational 3908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * temps. On top of that, we'll spill rIBASE (edi) 3909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for use as the vB pointer and rFP (esi) for use 3910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as the vC pointer. Yuck. 3911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long vAA, vBB, vCC */ 3913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- B 3914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- C 3915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) 3917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) 3918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rINST_FULL) 3919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%eax,4),rIBASE # rIBASE<- &v[B] 3920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),rFP # rFP<- &v[C] 3921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(rIBASE),%ecx # ecx<- Bmsw 3922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP),%ecx # ecx<- (Bmsw*Clsw) 3923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(rFP),%eax # eax<- Cmsw 3924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rIBASE),%eax # eax<- (Cmsw*Blsw) 3925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %eax,%ecx # ecx<- (Bmsw*Clsw)+(Cmsw*Blsw) 3926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (rFP),%eax # eax<- Clsw 3927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mull (rIBASE) # eax<- (Clsw*Alsw) 3928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rINST_FULL) 3929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 3930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MUL_LONG_continue 3931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG: /* 0x9e */ 3935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG.S */ 3936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div vAA, vBB, vCC */ 3937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 3938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 3939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 3941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 3942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG2(%esp) 3943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 3944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_check_zero 3945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 3946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_check_neg1 3947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_notSpecial: 3948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 3949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 3950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_notSpecial1: 3951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 3952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) 3953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 3954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_continue 3955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG: /* 0x9f */ 3959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_LONG.S */ 3960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG.S */ 3961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div vAA, vBB, vCC */ 3962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 3963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 3964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 3966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 3967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG2(%esp) 3968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 3969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_check_zero 3970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 3971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_check_neg1 3972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_notSpecial: 3973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 3974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 3975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_notSpecial1: 3976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 3977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) 3978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 3979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_continue 3980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG: /* 0xa0 */ 3985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_LONG.S */ 3986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 3987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 3989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 3995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 3996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 3997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 3998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 3999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 4000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 4001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 4003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG: /* 0xa1 */ 4011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_LONG.S */ 4012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 4022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 4023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 4024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 4026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 4027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 4029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG: /* 0xa2 */ 4037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_LONG.S */ 4038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) # rPC<- v[BB+0] 4048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) # eax<- v[BB+1] 4049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl (rFP,%ecx,4),rPC # ex: addl (rFP,%ecx,4),rPC 4050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 4052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,rINST_FULL,0) # v[AA+0] <- rPC 4053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[AA+1] <- eax 4055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG: /* 0xa3 */ 4063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_LONG.S */ 4064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long vAA, vBB, vCC */ 4073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # spill edx 4079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,%eax,1) # ecx<- v[BB+1] 4080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,%ecx) # ecx<- vCC 4081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,0) # eax<- v[BB+0] 4082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shldl %eax,%edx 4083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax 4084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edx 4087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 4088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 4090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[AA+1]<- %edx 4091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHL_LONG_finish 4094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG: /* 0xa4 */ 4098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_LONG.S */ 4099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long vAA, vBB, vCC */ 4108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # spill edx 4114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,%eax,1) # edx<- v[BB+1] 4115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,%ecx) # ecx<- vCC 4116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,0) # eax<- v[BB+0] 4117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%edx 4119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $31,%edx 4123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 4125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[AA+1]<- edx 4126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHR_LONG_finish 4129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG: /* 0xa5 */ 4133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_LONG.S */ 4134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long vAA, vBB, vCC */ 4143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # spill edx 4149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,%eax,1) # edx<- v[BB+1] 4150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%ecx,%ecx) # ecx<- vCC 4151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,0) # eax<- v[BB+0] 4152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%edx 4154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %edx,%edx 4158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 4160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,%ecx,1) # v[BB+1]<- edx 4161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_USHR_LONG_finish 4163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT: /* 0xa6 */ 4167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_FLOAT.S */ 4168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fadds (rFP,%ecx,4) # ex: faddp 4179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT: /* 0xa7 */ 4189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_FLOAT.S */ 4190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fsubs (rFP,%ecx,4) # ex: faddp 4201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT: /* 0xa8 */ 4211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_FLOAT.S */ 4212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fmuls (rFP,%ecx,4) # ex: faddp 4223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT: /* 0xa9 */ 4233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_FLOAT.S */ 4234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fdivs (rFP,%ecx,4) # ex: faddp 4245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT: /* 0xaa */ 4255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_FLOAT.S */ 4256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float vAA, vBB, vCC */ 4257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vCC to fp stack 4260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 4264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 4265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 4266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 4267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 4268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 4269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE: /* 0xab */ 4276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_DOUBLE.S */ 4277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project faddl (rFP,%ecx,4) # ex: faddp 4288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE: /* 0xac */ 4298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_DOUBLE.S */ 4299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fsubl (rFP,%ecx,4) # ex: faddp 4310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE: /* 0xad */ 4320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_DOUBLE.S */ 4321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fmull (rFP,%ecx,4) # ex: faddp 4332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE: /* 0xae */ 4342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_DOUBLE.S */ 4343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fdivl (rFP,%ecx,4) # ex: faddp 4354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE: /* 0xaf */ 4364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_DOUBLE.S */ 4365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float vAA, vBB, vCC */ 4366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vCC to fp stack 4369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- AA 4371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 4372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 4373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 4374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 4375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 4376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 4377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 4378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 4379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_2ADDR: /* 0xb0 */ 4385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_2ADDR.S */ 4386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT_2ADDR: /* 0xb1 */ 4415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_INT_2ADDR.S */ 4416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_2ADDR: /* 0xb2 */ 4445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_2ADDR.S */ 4446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul vA, vB */ 4447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP,%ecx,4),%eax 4453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 4455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_2ADDR: /* 0xb3 */ 4462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_2ADDR.S */ 4463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv2addr.S */ 4464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 4466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 4467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/2addr vA, vB */ 4469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vBB 4475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 4477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 4478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 4479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_2ADDR_continue_div2addr 4480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 4481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_2ADDR_continue_div2addr 4482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 4483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_2ADDR_finish_div2addr 4484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_2ADDR: /* 0xb4 */ 4490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_2ADDR.S */ 4491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv2addr.S */ 4492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 4494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 4495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/2addr vA, vB */ 4497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vBB 4503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 4505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 4506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 4507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_2ADDR_continue_div2addr 4508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 4509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_2ADDR_continue_div2addr 4510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 4511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_2ADDR_finish_div2addr 4512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_2ADDR: /* 0xb5 */ 4518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_2ADDR.S */ 4519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_2ADDR: /* 0xb6 */ 4548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_2ADDR.S */ 4549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_2ADDR: /* 0xb7 */ 4578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_2ADDR.S */ 4579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vB 4598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_2ADDR: /* 0xb8 */ 4608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT_2ADDR.S */ 4609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 4620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: sarl %cl,%eax 4621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 4622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_2ADDR: /* 0xb9 */ 4630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT_2ADDR.S */ 4631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 4642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: sarl %cl,%eax 4643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 4644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_2ADDR: /* 0xba */ 4652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT_2ADDR.S */ 4653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 4659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 4661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vAA 4664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: sarl %cl,%eax 4665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 4666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG_2ADDR: /* 0xbb */ 4674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_LONG_2ADDR.S */ 4675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG_2ADDR: /* 0xbc */ 4696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_LONG_2ADDR.S */ 4697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG_2ADDR: /* 0xbd */ 4718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_LONG_2ADDR.S */ 4719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply, 2-addr version 4721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We could definately use more free registers for 4723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this code. We must spill rPC (edx) because it 4724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is used by imul. We'll also spill rINST (ebx), 4725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * giving us eax, ebc, ecx and edx as computational 4726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * temps. On top of that, we'll spill rIBASE (edi) 4727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for use as the vA pointer and rFP (esi) for use 4728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as the vB pointer. Yuck. 4729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long/2addr vA, vB */ 4731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 4732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 4733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) 4736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) 4737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%eax,4),rIBASE # rIBASE<- &v[A] 4738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,rINST_FULL,4),rFP # rFP<- &v[B] 4739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(rIBASE),%ecx # ecx<- Amsw 4740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP),%ecx # ecx<- (Amsw*Blsw) 4741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(rFP),%eax # eax<- Bmsw 4742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rIBASE),%eax # eax<- (Bmsw*Alsw) 4743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %eax,%ecx # ecx<- (Amsw*Blsw)+(Bmsw*Alsw) 4744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (rFP),%eax # eax<- Blsw 4745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mull (rIBASE) # eax<- (Blsw*Alsw) 4746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MUL_LONG_2ADDR_continue 4747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG_2ADDR: /* 0xbe */ 4751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */ 4752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/2addr vA, vB */ 4753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax 4754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,%eax # eax<- B 4755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 4756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 4759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 4760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG2(%esp) 4761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 4762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_2ADDR_check_zero 4763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 4764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_2ADDR_check_neg1 4765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial: 4766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 4767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 4768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial1: 4769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_2ADDR_continue 4770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG_2ADDR: /* 0xbf */ 4774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_LONG_2ADDR.S */ 4775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */ 4776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/2addr vA, vB */ 4777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax 4778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,%eax # eax<- B 4779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 4780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%eax,0) 4783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%eax,1) 4784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG2(%esp) 4785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 4786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_2ADDR_check_zero 4787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 4788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_2ADDR_check_neg1 4789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial: 4790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 4791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 4792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial1: 4793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_2ADDR_continue 4794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG_2ADDR: /* 0xc0 */ 4799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_LONG_2ADDR.S */ 4800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG_2ADDR: /* 0xc1 */ 4821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_LONG_2ADDR.S */ 4822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG_2ADDR: /* 0xc2 */ 4843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_LONG_2ADDR.S */ 4844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] 4852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) # eax<- v[B+1] 4853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 4854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xF,rINST_LO # rINST_FULL<- A 4855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,(rFP,rINST_FULL,4) # example: addl %eax,(rFP,rINST_FULL,4) 4856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,4(rFP,rINST_FULL,4) # example: adcl %ecx,4(rFP,rINST_FULL,4) 4857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG_2ADDR: /* 0xc3 */ 4865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_LONG_2ADDR.S */ 4866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 4868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 4869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 4871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_HI<- BA 4876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 4878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,rINST_FULL,1) # edx<- v[AA+1] 4881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- vBB 4882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shldl %eax,%edx 4883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax 4884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edx 4887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 4888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,rINST_FULL,1) # v[AA+1]<- edx 4890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHL_LONG_2ADDR_finish 4892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG_2ADDR: /* 0xc4 */ 4896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_LONG_2ADDR.S */ 4897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 4899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 4900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 4902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_HI<- BA 4907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 4909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,rINST_FULL,1) # edx<- v[AA+1] 4912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- vBB 4913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%edx 4915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $31,%edx 4919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,rINST_FULL,1) # v[AA+1]<- edx 4921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHR_LONG_2ADDR_finish 4923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG_2ADDR: /* 0xc5 */ 4927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_LONG_2ADDR.S */ 4928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 4930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 4931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 4933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rINST gets AA */ 4936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 4937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_HI<- BA 4938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 4939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- v[AA+0] 4940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 4942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%edx,rINST_FULL,1) # edx<- v[AA+1] 4943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- vBB 4944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%edx 4946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %edx,%edx 4950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%edx,rINST_FULL,1) # v[AA+1]<- edx 4952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 4953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_USHR_LONG_2ADDR_finish 4954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT_2ADDR: /* 0xc6 */ 4958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_FLOAT_2ADDR.S */ 4959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 4960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 4970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fadds (rFP,rINST_FULL,4) # ex: faddp 4972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 4975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT_2ADDR: /* 0xc7 */ 4981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_FLOAT_2ADDR.S */ 4982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 4983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 4991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 4992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 4993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 4994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fsubs (rFP,rINST_FULL,4) # ex: faddp 4995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 4996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 4997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 4998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 4999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT_2ADDR: /* 0xc8 */ 5004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_FLOAT_2ADDR.S */ 5005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 5016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fmuls (rFP,rINST_FULL,4) # ex: faddp 5018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 5021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT_2ADDR: /* 0xc9 */ 5027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_FLOAT_2ADDR.S */ 5028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 5039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fdivs (rFP,rINST_FULL,4) # ex: faddp 5041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 5044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT_2ADDR: /* 0xca */ 5050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_FLOAT_2ADDR.S */ 5051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float/2addr vA, vB */ 5052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,rINST_FULL,4) # vBB to fp stack 5055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 5057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 5059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 5060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 5061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 5062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 5063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 5064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 5066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE_2ADDR: /* 0xcb */ 5071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_DOUBLE_2ADDR.S */ 5072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project faddl (rFP,rINST_FULL,4) # ex: faddp 5085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE_2ADDR: /* 0xcc */ 5094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_DOUBLE_2ADDR.S */ 5095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fsubl (rFP,rINST_FULL,4) # ex: faddp 5108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE_2ADDR: /* 0xcd */ 5117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_DOUBLE_2ADDR.S */ 5118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fmull (rFP,rINST_FULL,4) # ex: faddp 5131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE_2ADDR: /* 0xce */ 5140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_DOUBLE_2ADDR.S */ 5141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fdivl (rFP,rINST_FULL,4) # ex: faddp 5154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE_2ADDR: /* 0xcf */ 5163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_DOUBLE_2ADDR.S */ 5164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float/2addr vA, vB */ 5165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # ecx<- A+ 5166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- B 5167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,rINST_FULL,4) # vBB to fp stack 5168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 5171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 5172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 5173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 5174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 5175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 5176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 5177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 5178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT16: /* 0xd0 */ 5184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_LIT16.S */ 5185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %ecx,%eax # for example: addl %ecx, %eax 5203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT: /* 0xd1 */ 5212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RSUB_INT.S */ 5213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,%ecx # for example: addl %ecx, %eax 5231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,rINST_FULL) 5232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT16: /* 0xd2 */ 5240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_LIT16.S */ 5241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul/lit16 vA, vB, #+CCCC */ 5242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need A in rINST_FULL, ssssCCCC in ecx, vB in eax */ 5243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull %ecx,%eax # trashes rPC 5251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 5252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT16: /* 0xd3 */ 5260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_LIT16.S */ 5261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit16.S */ 5262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 5264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 5265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit16 vA, vB, #+CCCC */ 5267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need A in rINST_FULL, ssssCCCC in ecx, vB in eax */ 5268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT16_continue_div 5279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT16_continue_div 5281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 5282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_LIT16_finish_div 5283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT16: /* 0xd4 */ 5289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_LIT16.S */ 5290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit16.S */ 5291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 5293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 5294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit16 vA, vB, #+CCCC */ 5296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need A in rINST_FULL, ssssCCCC in ecx, vB in eax */ 5297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT16_continue_div 5308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT16_continue_div 5310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 5311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_LIT16_finish_div 5312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT16: /* 0xd5 */ 5318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_LIT16.S */ 5319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %ecx,%eax # for example: addl %ecx, %eax 5337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT16: /* 0xd6 */ 5346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_LIT16.S */ 5347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,%eax # for example: addl %ecx, %eax 5365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT16: /* 0xd7 */ 5374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_LIT16.S */ 5375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- 000000BA 5387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB 5389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 5391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xor %ecx,%eax # for example: addl %ecx, %eax 5393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 5394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT8: /* 0xd8 */ 5402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_LIT8.S */ 5403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %ecx,%eax # ex: addl %ecx,%eax 5420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT_LIT8: /* 0xd9 */ 5429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RSUB_INT_LIT8.S */ 5430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,%ecx # ex: addl %ecx,%eax 5447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%ecx,rINST_FULL) 5448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT8: /* 0xda */ 5456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_LIT8.S */ 5457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul/lit8 vAA, vBB, #+CC */ 5458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull %ecx,%eax # trashes rPC 5464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 5465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT8: /* 0xdb */ 5473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_LIT8.S */ 5474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit8.S */ 5475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit div/rem "lit8" binary operation. Handles special case of 5477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op0=minint & op1=-1 5478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit8 vAA, vBB, #+CC */ 5480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT8_continue_div 5489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT8_continue_div 5491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 5492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_LIT8_finish_div 5493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT8: /* 0xdc */ 5499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_LIT8.S */ 5500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit8.S */ 5501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit div/rem "lit8" binary operation. Handles special case of 5503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op0=minint & op1=-1 5504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit8 vAA, vBB, #+CC */ 5506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT8_continue_div 5515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT8_continue_div 5517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 5518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_LIT8_finish_div 5519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT8: /* 0xdd */ 5525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_LIT8.S */ 5526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %ecx,%eax # ex: addl %ecx,%eax 5543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT8: /* 0xde */ 5552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_LIT8.S */ 5553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,%eax # ex: addl %ecx,%eax 5570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT8: /* 0xdf */ 5579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_LIT8.S */ 5580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xor %ecx,%eax # ex: addl %ecx,%eax 5597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_LIT8: /* 0xe0 */ 5606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT_LIT8.S */ 5607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: addl %ecx,%eax 5624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_LIT8: /* 0xe1 */ 5633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT_LIT8.S */ 5634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: addl %ecx,%eax 5651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_LIT8: /* 0xe2 */ 5660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT_LIT8.S */ 5661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,rINST_FULL # rINST_FULL<- AA 5676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG (%eax,%eax) # eax<- rBB 5677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: addl %ecx,%eax 5678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,rINST_FULL) 5679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E3: /* 0xe3 */ 5687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_E3.S */ 5688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E4: /* 0xe4 */ 5695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_E4.S */ 5696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E5: /* 0xe5 */ 5703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_E5.S */ 5704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E6: /* 0xe6 */ 5711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_E6.S */ 5712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_E7: /* 0xe7 */ 5719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_E7.S */ 5720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 57265387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_IGET_WIDE_VOLATILE: /* 0xe8 */ 57275387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 57285387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 57295387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_PC_TO_GLUE(%ecx) # only need to export these two 57305387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_FP_TO_GLUE(%ecx) # only need to export these two 57315387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 57325387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_IGET_WIDE_VOLATILE # do the real work 57335387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 57345387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_PC_FROM_GLUE(%ecx) # retrieve updated values 57355387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_FP_FROM_GLUE(%ecx) # retrieve updated values 57365387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden FETCH_INST() 57375387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 5738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 57405387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_IPUT_WIDE_VOLATILE: /* 0xe9 */ 57415387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 57425387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 57435387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_PC_TO_GLUE(%ecx) # only need to export these two 57445387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_FP_TO_GLUE(%ecx) # only need to export these two 57455387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 57465387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_IPUT_WIDE_VOLATILE # do the real work 57475387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 57485387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_PC_FROM_GLUE(%ecx) # retrieve updated values 57495387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_FP_FROM_GLUE(%ecx) # retrieve updated values 57505387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden FETCH_INST() 57515387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 5752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 57545387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_SGET_WIDE_VOLATILE: /* 0xea */ 57555387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 57565387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 57575387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_PC_TO_GLUE(%ecx) # only need to export these two 57585387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_FP_TO_GLUE(%ecx) # only need to export these two 57595387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 57605387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_SGET_WIDE_VOLATILE # do the real work 57615387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 57625387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_PC_FROM_GLUE(%ecx) # retrieve updated values 57635387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_FP_FROM_GLUE(%ecx) # retrieve updated values 57645387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden FETCH_INST() 57655387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 5766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 57685387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_SPUT_WIDE_VOLATILE: /* 0xeb */ 57695387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 57705387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 57715387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_PC_TO_GLUE(%ecx) # only need to export these two 57725387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden SAVE_FP_TO_GLUE(%ecx) # only need to export these two 57735387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 57745387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_SPUT_WIDE_VOLATILE # do the real work 57755387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GET_GLUE(%ecx) 57765387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_PC_FROM_GLUE(%ecx) # retrieve updated values 57775387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden LOAD_FP_FROM_GLUE(%ecx) # retrieve updated values 57785387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden FETCH_INST() 57795387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 5780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 578296516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden.L_OP_BREAKPOINT: /* 0xec */ 578396516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden/* File: x86/OP_BREAKPOINT.S */ 5784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 57903a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden.L_OP_THROW_VERIFICATION_ERROR: /* 0xed */ 5791be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee/* File: x86/OP_THROW_VERIFICATION_ERROR.S */ 5792be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee /* 5793be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * Handle a throw-verification-error instruction. This throws an 5794be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * exception for an error discovered during verification. The 5795be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * exception is indicated by AA, with some detail provided by BBBB. 5796be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee */ 5797be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee /* op AA, ref@BBBB */ 5798b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden GET_GLUE(%ecx) 5799be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movzwl 2(rPC),%eax # eax<- BBBB 5800be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl offGlue_method(%ecx),%ecx # ecx<- glue->method 5801be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee EXPORT_PC() 5802be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA 5803be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl %eax,OUT_ARG2(%esp) # arg2<- BBBB 5804be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl rINST_FULL,OUT_ARG1(%esp) # arg1<- AA 5805be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl %ecx,OUT_ARG0(%esp) # arg0<- method 5806be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee SPILL(rPC) 5807be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee call dvmThrowVerificationError # call(method, kind, ref) 5808be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee UNSPILL(rPC) 5809be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee jmp common_exceptionThrown # handle exception 5810be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee 5811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_EXECUTE_INLINE: /* 0xee */ 5814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_EXECUTE_INLINE.S */ 5815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Execute a "native inline" instruction. 5817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We will be calling through a function table: 5819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (*gDvmInlineOpsTable[opIndex].func)(arg0, arg1, arg2, arg3, pResult) 5821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* [opt] execute-inline vAA, {vC, vD, vE, vF}, inline@BBBB */ 5824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 5825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 5826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 5827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offGlue_retval(%ecx),%ecx # ecx<- & glue->retval 5828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG4(%esp) 5829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $12,rINST_FULL # rINST_FULL<- arg count (0-4) 5830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 5831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call .LOP_EXECUTE_INLINE_continue # make call; will return after 5832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 5833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # successful? 5834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 5835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 5836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 5837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5841b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden.L_OP_EXECUTE_INLINE_RANGE: /* 0xef */ 5842b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden /* (stub) */ 5843b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden GET_GLUE(%ecx) 5844b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden SAVE_PC_TO_GLUE(%ecx) # only need to export these two 5845b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden SAVE_FP_TO_GLUE(%ecx) # only need to export these two 5846b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 5847b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden call dvmMterp_OP_EXECUTE_INLINE_RANGE # do the real work 5848b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden GET_GLUE(%ecx) 5849b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden LOAD_PC_FROM_GLUE(%ecx) # retrieve updated values 5850b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden LOAD_FP_FROM_GLUE(%ecx) # retrieve updated values 5851b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden FETCH_INST() 5852b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden GOTO_NEXT 5853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_EMPTY: /* 0xf0 */ 5856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT_EMPTY.S */ 5857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * invoke-direct-empty is a no-op in a "standard" interpreter. 5859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 5861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 5862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_F1: /* 0xf1 */ 5867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_F1.S */ 5868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 5869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 5870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_QUICK: /* 0xf2 */ 5875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */ 5876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-quick */ 5877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 5878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 5879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 5881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 5882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 5883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 5884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%eax 5885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 5886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # rINST_FULL<- A 5889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,%ecx) # fp[A]<- result 5890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE_QUICK: /* 0xf3 */ 5895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_WIDE_QUICK.S */ 5896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-wide-quick */ 5897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 5898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 5899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 5901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 5902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 5903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 5904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of 64-bit source 5905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax),%ecx # ecx<- lsw 5906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%eax),%eax # eax<- msw 5907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 5908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) # v[A+0]<- lsw 5910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) # v[A+1]<- msw 5911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT_QUICK: /* 0xf4 */ 5918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_OBJECT_QUICK.S */ 5919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */ 5920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-quick */ 5921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 5922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 5923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 5925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 5926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 5927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 5928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%eax 5929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 5930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # rINST_FULL<- A 5933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG (%eax,%ecx) # fp[A]<- result 5934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_QUICK: /* 0xf5 */ 5940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_QUICK.S */ 5941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iput-quick, iput-object-quick */ 5942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 5943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 5944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 5946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 5947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 5949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 5950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # is object null? 5951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 5952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) 5953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE_QUICK: /* 0xf6 */ 5960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_WIDE_QUICK.S */ 5961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iput-wide-quick */ 5962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 5963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 5964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 5966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 5967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # is object null? 5968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 5969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%ecx # ecx<- Address of 64-bit target 5970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 5971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%eax,rINST_FULL,0) # eax<- lsw 5973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- msw 5974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(%ecx) 5975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4(%ecx) 5976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 5979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT_QUICK: /* 0xf7 */ 5983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_OBJECT_QUICK.S */ 5984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_QUICK.S */ 5985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iput-quick, iput-object-quick */ 5986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 5987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 5988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # vB (object we're operating on) 5990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 5991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,rINST_LO # rINST_FULL<- A 5992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 5993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 5994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # is object null? 5995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 5996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) 5997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 5998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 5999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK: /* 0xf8 */ 6005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */ 6006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 6008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 6010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 6014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 6017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vC ("this" ptr) 6019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yep, throw exception 6021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- thisPtr->clazz 6022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable 6023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # might throw later - get ready 6024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[BBBB] 6025c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 6026c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 6027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK_RANGE: /* 0xf9 */ 6030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK_RANGE.S */ 6031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */ 6032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 6034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 6036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 6040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 6043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vC ("this" ptr) 6045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yep, throw exception 6047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- thisPtr->clazz 6048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable 6049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # might throw later - get ready 6050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[BBBB] 6051c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 6052c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 6053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK: /* 0xfa */ 6057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */ 6058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 6060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 6062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 6067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 6068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- D (or stays CCCC) 6070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 6073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super 6074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null "this"? 6075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # "this" is null, throw exception 6076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- vtable 6078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- super->vtable[BBBB] 6080c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 6081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK_RANGE: /* 0xfb */ 6085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK_RANGE.S */ 6086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */ 6087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 6089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 6091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 6096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 6097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- D (or stays CCCC) 6099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- "this" 6102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super 6103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null "this"? 6104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # "this" is null, throw exception 6105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- vtable 6107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- super->vtable[BBBB] 6109c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 6110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FC: /* 0xfc */ 6115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_FC.S */ 6116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 6117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 6118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FD: /* 0xfd */ 6123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_FD.S */ 6124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 6125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 6126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FE: /* 0xfe */ 6131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_FE.S */ 6132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 6133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 6134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_FF: /* 0xff */ 6139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_FF.S */ 6140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 6141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 6142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size dvmAsmInstructionStart, .-dvmAsmInstructionStart 6147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmInstructionEnd 6148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionEnd: 6149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 6151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 6152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sister implementations 6153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 6154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmSisterStart 6156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmAsmSisterStart, %function 6157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 6158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 4 6159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterStart: 6160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_STRING */ 6162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* This is the less common path, so we'll redo some work 6164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project here rather than force spills on the common path */ 6165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_STRING_resolve: 6166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 6167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,rINST_FULL # rINST_FULL<- AA 6168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 6170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax 6172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveString # go resolve 6176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 6179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 6180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_STRING_JUMBO */ 6185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* This is the less common path, so we'll redo some work 6187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project here rather than force spills on the common path */ 6188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_STRING_JUMBO_resolve: 6189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 6190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,rINST_FULL # rINST_FULL<- AA 6191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 6193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBBBBB 6194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax 6195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveString # go resolve 6199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 6202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 6203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 6205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_CLASS */ 6208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* This is the less common path, so we'll redo some work 6210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project here rather than force spills on the common path */ 6211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_CLASS_resolve: 6212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%eax) 6213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,rINST_FULL # rINST_FULL<- AA 6214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 6216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,OUT_ARG2(%esp) # true 6217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax 6219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # go resolve 6223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 6226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 6227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MONITOR_ENTER */ 6232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MONITOR_ENTER_continue: 6234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # have to - caller save 6235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmLockObject # dvmLockObject(self,object) 6238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef WITH_DEADLOCK_PREDICTION 6240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlueSelf(%ecx),%ecx # ecx<- glue->self 6242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offThread_exception(%ecx),%eax 6243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 6244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne common_exceptionThrown 6245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 6246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 6247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MONITOR_EXIT */ 6250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MONITOR_EXIT_continue: 6252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmUnlockObject # unlock(self,obj) 6253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 6255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 6257668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee je common_exceptionThrown # no, exception pending 6258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6259668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee.LOP_MONITOR_EXIT_errNullObject: 6260668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee ADVANCE_PC(1) # advance before throw 6261668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee jmp common_errNullObject 6262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CHECK_CAST */ 6264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 6267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds obj->clazz 6268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds class resolved from BBBB 6269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds object 6270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_fullcheck: 6272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInstanceofNonTrivial # eax<- boolean result 6276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_CHECK_CAST_okay # no, success 6279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # A cast has failed. We need to throw a ClassCastException with the 6281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # class of the object that failed to be cast. 6282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 6284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrClassCastException,%eax 6285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%ecx),%ecx 6286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- message 6287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- obj->clazz->descriptor 6288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowExceptionWithClassMessage 6290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path, and we're 6295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * going to have to recreate some data. 6296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds object 6298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolve: 6300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 6304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 6305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- metho->clazz 6306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 6307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 6308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- resolved ClassObject ptr 6310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 6312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yes, handle exception 6313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 6314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CHECK_CAST_resolved # pick up where we left off 6315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INSTANCE_OF */ 6317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 6320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds obj->clazz 6321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class resolved from BBBB 6322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_HI has BA 6323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC already spilled 6324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_fullcheck: 6326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInstanceofNonTrivial # eax<- boolean result 6329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # fall through to OP_INSTANCE_OF_store 6330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds boolean result 6333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_HI holds BA 6334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_store: 6336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 6338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecl<- A 6340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vA<- eax 6342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test succeeded, save and bail. 6346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds A 6347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_trivial: 6349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- BA 6351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecl<- A 6353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%eax 6355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) # vA<- true 6356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 6360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC holds BBBB 6362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_HI holds BA 6363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolve: 6365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG1(%esp) # arg1<- BBBB 6366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx 6369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,OUT_ARG2(%esp) # arg2<- true 6370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 6373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- resolved ClassObject ptr 6374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Now, we need to sync up with fast path. We need eax to 6378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * hold the obj->clazz, and ecx to hold the resolved class 6379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved class 6381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%eax # eax<- BA 6382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 6383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,%eax) # eax<- vB (obj) 6384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- obj->clazz 6385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INSTANCE_OF_resolved 6386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_NEW_INSTANCE */ 6388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_initialized: # on entry, ecx<- class 6390b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden /* TODO: remove test for interface/abstract, now done in verifier */ 6391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl $(ACC_INTERFACE|ACC_ABSTRACT),offClassObject_accessFlags(%ecx) 6392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG1(%esp) 6393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_INSTANCE_abstract 6394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_finish: # ecx=class 6395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocObject # eax<- new object 6397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 6399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, bail out 6402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 6403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class initialization required. 6408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class object 6410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_needinit: 6412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object 6413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInitClass # initialize class 6415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) # restore object 6416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_INSTANCE_initialized # success, continue 6418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) # failed, restore PC 6419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # go deal with init exception 6420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 6423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolve: 6426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 6428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 6429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) 6432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # call(clazz,off,flags) 6434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved ClassObject ptr 6435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # success? 6436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_INSTANCE_resolved # good to go 6437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 6439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6441b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden * TODO: remove this 6442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We can't instantiate an abstract class or interface, so throw an 6443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * InstantiationError with the class descriptor as the message. 6444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class object 6446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_abstract: 6448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%ecx),%eax 6449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrInstantiationError,OUT_ARG0(%esp) 6450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowExceptionWithClassMessage 6452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_NEW_ARRAY */ 6456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolve class. (This is an uncommon case.) 6459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class (null here) 6460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array length (vB) 6461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_ARRAY_resolve: 6463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%eax) # save array length 6465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 6466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- CCCC 6467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) 6470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 6473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx 6475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%eax) 6476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # successful resolution? 6477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, bail. 6478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# fall through to OP_NEW_ARRAY_finish 6479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Finish allocation 6482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class 6484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array length (vB) 6485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_ARRAY_finish: 6487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) 6490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocArrayByClass # eax<- call(clazz,length,flags) 6492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yup - go handle 6495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 6496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 6498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY */ 6502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_more: 6504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 6505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 6506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 6507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yes, handle it 6510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # note: fall through to .LOP_FILLED_NEW_ARRAY_continue 6512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 6515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array class [r0] 6516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds AA or BB [r10] 6517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is scratch 6518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC is valid, but has been spilled 6519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_continue: 6521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%eax),%ecx # ecx<- arrayClass->descriptor 6522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) # arg2<- flags 6523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 1(%ecx),%ecx # ecx<- descriptor[1] 6524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- arrayClass 6525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'I',%cl # supported? 6526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'L',%cl 6528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'[',%cl 6530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_notimpl # no, not handled yet 6531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 6532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(rINST_FULL) # save copy, need "B" later 6534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rINST_FULL 6535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,OUT_ARG1(%esp) # arg1<- A or AA (length) 6537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocArrayByClass # eax<- call(arrayClass, length, flags) 6538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # alloc successful? 6541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.l<- new array 6543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- FEDC or CCCC 6544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax),%eax # eax<- newArray->contents 6545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* at this point: 6547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax is pointer to tgt 6548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL is length 6549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is FEDC or CCCC 6550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL is BA 6551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC is valid, but spilled 6552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We now need to copy values from registers into the array 6553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # set up src pointer 6557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) # esi 6558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # edi 6559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edi # set up dst ptr 6560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),%esi # set up src ptr 6561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx # load count register 6562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rep 6564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsd 6565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 6567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 6568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 6569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 4f 6570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(rPC) 6571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0x0f,rPC # rPC<- 0000000A 6572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,rPC # rPC<- 000A0000 6573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,rPC # rpc<- 000AFEDC 6574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: 6575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 6576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx # ecx<- next reg to load 6577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 6578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,rPC 6579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal 4(%eax),%eax 6580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,-4(%eax) 6581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub $1,rINST_FULL 6582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 3b 6583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project4: 6584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 6589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception indicating that we have not implemented this 6594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mode of filled-new-array. 6595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_notimpl: 6597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrInternalError,%eax 6598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrFilledNewArrayNotImpl,%eax 6600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 6602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY_RANGE */ 6606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_more: 6608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 6609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 6610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 6611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yes, handle it 6614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # note: fall through to .LOP_FILLED_NEW_ARRAY_RANGE_continue 6616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 6619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array class [r0] 6620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds AA or BB [r10] 6621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is scratch 6622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC is valid, but has been spilled 6623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_continue: 6625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%eax),%ecx # ecx<- arrayClass->descriptor 6626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) # arg2<- flags 6627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 1(%ecx),%ecx # ecx<- descriptor[1] 6628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- arrayClass 6629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'I',%cl # supported? 6630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'L',%cl 6632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'[',%cl 6634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_RANGE_notimpl # no, not handled yet 6635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 6636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(rINST_FULL) # save copy, need "B" later 6638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rINST_FULL 6639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,OUT_ARG1(%esp) # arg1<- A or AA (length) 6641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocArrayByClass # eax<- call(arrayClass, length, flags) 6642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 6644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # alloc successful? 6645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.l<- new array 6647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- FEDC or CCCC 6648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax),%eax # eax<- newArray->contents 6649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* at this point: 6651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax is pointer to tgt 6652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL is length 6653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is FEDC or CCCC 6654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL is BA 6655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC is valid, but spilled 6656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We now need to copy values from registers into the array 6657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 6660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # set up src pointer 6661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) # esi 6662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rIBASE) # edi 6663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edi # set up dst ptr 6664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),%esi # set up src ptr 6665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx # load count register 6666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rep 6668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsd 6669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 6671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 6672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL 6673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 4f 6674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(rPC) 6675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0x0f,rPC # rPC<- 0000000A 6676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,rPC # rPC<- 000A0000 6677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,rPC # rpc<- 000AFEDC 6678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: 6679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 6680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx # ecx<- next reg to load 6681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 6682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,rPC 6683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal 4(%eax),%eax 6684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,-4(%eax) 6685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub $1,rINST_FULL 6686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 3b 6687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project4: 6688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 6690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 6693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception indicating that we have not implemented this 6698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mode of filled-new-array. 6699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_notimpl: 6701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrInternalError,%eax 6702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrFilledNewArrayNotImpl,%eax 6704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 6706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPL_FLOAT */ 6710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_isNaN: 6712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $-1,%ecx 6713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPL_FLOAT_finish 6714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPG_FLOAT */ 6716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_isNaN: 6718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%ecx 6719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPG_FLOAT_finish 6720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPL_DOUBLE */ 6722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_isNaN: 6724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $-1,%ecx 6725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPL_DOUBLE_finish 6726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPG_DOUBLE */ 6728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_isNaN: 6730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%ecx 6731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPG_DOUBLE_finish 6732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMP_LONG */ 6734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_bigger: 6736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%ecx 6738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMP_LONG_finish 6739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_smaller: 6740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $-1,%ecx 6742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_finish: 6743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,rINST_FULL) 6744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_AGET_WIDE */ 6749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_AGET_WIDE_finish: 6751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,8),%eax 6752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax),%ecx 6753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%eax),%eax 6754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) 6755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) 6756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_APUT_WIDE */ 6761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_WIDE_finish: 6763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,8),%eax 6764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,0) 6765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) 6766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4(%eax) 6767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,(%eax) 6769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_APUT_OBJECT */ 6773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* On entry: 6775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax<- array object 6776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx<- index 6777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL<- vAA 6778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_OBJECT_continue: 6780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,4),%ecx 6781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rINST_FULL,rINST_FULL # storing null reference? 6782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_APUT_OBJECT_skip_check 6783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) 6785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- arrayObj->clazz 6786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz 6787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmCanPutArrayElement # test object type vs. array type 6790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 6793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errArrayStore 6794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_OBJECT_skip_check: 6796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx) 6797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET */ 6802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_resolve: 6805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 6808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 6810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 6811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 6812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 6813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 6816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_finish 6817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_finish: 6820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 6822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 6823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 6824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 6825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 6826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 6828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 6830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 6831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 6832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 6833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 6835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_WIDE */ 6839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_WIDE_resolve: 6842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 6845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 6847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 6848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 6849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 6850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 6853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_WIDE_finish 6854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_WIDE_finish: 6857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 6859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 6860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 6861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 6862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 6863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 6865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 6867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 6868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of field 6869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax),%ecx # ecx<- lsw 6870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%eax),%eax # eax<- msw 6871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%ecx,rINST_FULL,0) 6872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,1) 6873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_OBJECT */ 6878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_OBJECT_resolve: 6881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 6884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 6886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 6887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 6888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 6889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 6892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_OBJECT_finish 6893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_OBJECT_finish: 6896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 6898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 6899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 6900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 6901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 6902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 6904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 6906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 6907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 6908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 6909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 6911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_BOOLEAN */ 6915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BOOLEAN_resolve: 6918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 6921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 6923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 6924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 6925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 6926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 6929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BOOLEAN_finish 6930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BOOLEAN_finish: 6933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 6935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 6936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 6937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 6938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 6939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 6941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 6943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 6944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 6945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 6946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 6948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_BYTE */ 6952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BYTE_resolve: 6955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 6958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 6960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 6961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 6962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 6963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 6964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 6965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 6966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BYTE_finish 6967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BYTE_finish: 6970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 6972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 6973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 6974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 6975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 6976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 6978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 6980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 6981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 6982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 6983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 6984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 6985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 6986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_CHAR */ 6989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_CHAR_resolve: 6992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 6993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 6994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 6995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 6996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 6997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 6998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 6999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_CHAR_finish 7004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_CHAR_finish: 7007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 7020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 7022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_SHORT */ 7026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_SHORT_resolve: 7029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_SHORT_finish 7041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_SHORT_finish: 7044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%eax # eax<- A 7057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%ecx,%eax) 7059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT */ 7063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_resolve: 7066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_finish 7078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_finish: 7081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_WIDE */ 7099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_WIDE_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_WIDE_finish 7114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_WIDE_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 movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of field 7129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,0) # ecx<- lsw 7130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- msw 7131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,4(%eax) 7132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,(%eax) 7134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_OBJECT */ 7138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_OBJECT_resolve: 7141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 7142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(rIBASE),rPC # rPC<- current method 7144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rPC),rPC # rPC<- method->clazz 7146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) # save object pointer across call 7147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveInstField # ... to dvmResolveInstField 7149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # ... which returns InstrField ptr 7152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_OBJECT_finish 7153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_OBJECT_finish: 7156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rIBASE is scratch, but needs to be unspilled 7161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds A 7162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] 7164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 7166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 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_BOOLEAN */ 7174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BOOLEAN_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_BOOLEAN_finish 7189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BOOLEAN_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 movb rINST_LO,(%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_BYTE */ 7210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BYTE_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_BYTE_finish 7225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BYTE_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_CHAR */ 7246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_CHAR_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_CHAR_finish 7261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_CHAR_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 movw rINST,(%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_SHORT */ 7282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_SHORT_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_SHORT_finish 7297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_SHORT_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_SGET */ 7318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_resolve: 7323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_finish # success, continue 7335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_WIDE */ 7338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_resolve: 7343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_WIDE_finish # success, continue 7355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_OBJECT */ 7358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_resolve: 7363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_OBJECT_finish # success, continue 7375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_BOOLEAN */ 7378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_resolve: 7383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_BOOLEAN_finish # success, continue 7395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_BYTE */ 7398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_resolve: 7403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_BYTE_finish # success, continue 7415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_CHAR */ 7418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_resolve: 7423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_CHAR_finish # success, continue 7435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_SHORT */ 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_SHORT_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_SHORT_finish # success, continue 7455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT */ 7458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_resolve: 7463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_finish # success, continue 7475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_WIDE */ 7478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_WIDE_resolve: 7483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_WIDE_finish # success, continue 7495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_OBJECT */ 7498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_OBJECT_resolve: 7503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_OBJECT_finish # success, continue 7515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_BOOLEAN */ 7518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_resolve: 7523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_BOOLEAN_finish # success, continue 7535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_BYTE */ 7538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_resolve: 7543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_BYTE_finish # success, continue 7555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_CHAR */ 7558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_resolve: 7563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_CHAR_finish # success, continue 7575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_SHORT */ 7578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_resolve: 7583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() # could throw, need to export 7587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_SHORT_finish # success, continue 7595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL */ 7598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_more: 7601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # ecx<- method->clazz 7602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 7603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags 7604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_continue # no, continue 7608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # yes, handle exception 7609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = resolved base method 7612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = scratch 7613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_continue: 7615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- GFED or CCCC 7616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 7617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%ecx # ecx<- D (or stays CCCC) 7618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- "this" 7620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%eax),%eax # eax<- baseMethod->methodIndex 7621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null this? 7622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # go if so 7623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%ecx),%ecx # ecx<- thisPtr->clazz 7624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable 7625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- vtable[methodIndex] 7626c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 7627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_SUPER */ 7629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 7632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method [r0] 7633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz [r9] 7634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_continue: 7636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%eax),%eax # eax<- method->clazz->super 7637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%ecx),%ecx # ecx<- baseMthod->methodIndex 7638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount) 7639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae .LOP_INVOKE_SUPER_nsm # method not present in superclass 7640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- ...clazz->super->vtable 7641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[methodIndex] 7642c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 7643c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 7644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = null (needs to be resolved base method) 7647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz 7648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_resolve: 7650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%eax) # method->clazz 7651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- method->clazz 7652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 7653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- resolver method type 7654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 7655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved base method 7660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%eax) # restore method->clazz 7661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_continue # good to go - continue 7662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # handle exception 7663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 7666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method 7667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_nsm: 7669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_name(%ecx),%eax 7670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov %eax,OUT_ARG1(%esp) 7671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNoSuchMethod 7672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_DIRECT */ 7674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 7677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL <- "this" register 7678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Things a bit ugly on this path, but it's the less 7679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * frequent one. We'll have to do some reloading. 7680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_resolve: 7682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) 7683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 7686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # reference (BBBB or CCCC) 7687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_DIRECT,OUT_ARG2(%esp) 7689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_DIRECT_finish 7695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_STATIC */ 7699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_STATIC_continue: 7701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_STATIC,%eax 7702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- flags 7703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # call(clazz,ref,flags) 7705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7707c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange 7708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_INTERFACE */ 7711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_INTERFACE_continue: 7713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex) 7714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 7717c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 7718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL_RANGE */ 7720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_RANGE_more: 7723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # ecx<- method->clazz 7724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 7725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags 7726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_RANGE_continue # no, continue 7730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # yes, handle exception 7731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = resolved base method 7734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = scratch 7735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_RANGE_continue: 7737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- GFED or CCCC 7738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 7739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%ecx # ecx<- D (or stays CCCC) 7740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # ecx<- "this" 7742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%eax),%eax # eax<- baseMethod->methodIndex 7743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null this? 7744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # go if so 7745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%ecx),%ecx # ecx<- thisPtr->clazz 7746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable 7747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- vtable[methodIndex] 7748c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 7749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_SUPER_RANGE */ 7751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 7754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method [r0] 7755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz [r9] 7756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_continue: 7758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%eax),%eax # eax<- method->clazz->super 7759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%ecx),%ecx # ecx<- baseMthod->methodIndex 7760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount) 7761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae .LOP_INVOKE_SUPER_RANGE_nsm # method not present in superclass 7762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- ...clazz->super->vtable 7763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[methodIndex] 7764c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 7765c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 7766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = null (needs to be resolved base method) 7769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz 7770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_resolve: 7772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%eax) # method->clazz 7773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- method->clazz 7774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 7775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- resolver method type 7776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 7777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved base method 7782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%eax) # restore method->clazz 7783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_RANGE_continue # good to go - continue 7784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # handle exception 7785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 7788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method 7789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_nsm: 7791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_name(%ecx),%eax 7792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov %eax,OUT_ARG1(%esp) 7793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNoSuchMethod 7794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_DIRECT_RANGE */ 7796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 7799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL <- "this" register 7800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Things a bit ugly on this path, but it's the less 7801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * frequent one. We'll have to do some reloading. 7802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_resolve: 7804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL_TMP(%ecx) 7805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 7806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 7808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # reference (BBBB or CCCC) 7809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_DIRECT,OUT_ARG2(%esp) 7811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL_TMP(%ecx) 7815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_DIRECT_RANGE_finish 7817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_STATIC_RANGE */ 7821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_STATIC_RANGE_continue: 7823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_STATIC,%eax 7824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- flags 7825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 7826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # call(clazz,ref,flags) 7827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7829c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange 7830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_INTERFACE_RANGE */ 7833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_INTERFACE_RANGE_continue: 7835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex) 7836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 7839c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 7840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FLOAT_TO_INT */ 7842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_continue: 7845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 7847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 7848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 7849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 7850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 7851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_FLOAT_TO_INT_special_case # fix up result 7853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_finish: 7855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 7856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_special_case: 7859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 7860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 7861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_FLOAT_TO_INT_isNaN 7862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 7863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 7865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_INT_finish 7867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_isNaN: 7868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 7869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 7871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_INT_finish 7873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FLOAT_TO_LONG */ 7875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_continue: 7878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 7879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 7880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 7881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 7882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 7883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 7884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_FLOAT_TO_LONG_special_case # fix up result 7886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_finish: 7888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 7889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_special_case: 7892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 7893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 7894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_FLOAT_TO_LONG_isNaN 7895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 7896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 7897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 7898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_finish 7900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_isNaN: 7901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 7902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 7903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 7904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_finish 7906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DOUBLE_TO_INT */ 7908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_continue: 7911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 7913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 7914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 7915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 7916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 7917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DOUBLE_TO_INT_special_case # fix up result 7919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_finish: 7921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 7922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_special_case: 7925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 7926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 7927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_DOUBLE_TO_INT_isNaN 7928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 7929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 7931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_finish 7933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_isNaN: 7934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 7935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 7936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 7937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_finish 7939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DOUBLE_TO_LONG */ 7941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_continue: 7944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 7945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 7946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 7947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 7948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 7949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 7950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DOUBLE_TO_LONG_special_case # fix up result 7952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_finish: 7954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 7955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_special_case: 7958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 7959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 7960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_DOUBLE_TO_LONG_isNaN 7961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 7962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 7963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 7964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_finish 7966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_isNaN: 7967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 7968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 7969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 7970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_finish 7972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT */ 7974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_continue_div: 7975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 7976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 7977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_finish_div: 7978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecl<- AA 7979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,%ecx) 7980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT */ 7986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_continue_div: 7987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 7988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 7989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_finish_div: 7990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecl<- AA 7991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%edx,%ecx) 7992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 7993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 7994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 7995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 7996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MUL_LONG */ 7998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MUL_LONG_continue: 8000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%edx),%edx # full result now in %edx:%eax 8001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx # ecx<- A 8002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,4(rFP,%ecx,4) # v[B+1]<- %edx 8003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) # restore rPC/%edx 8004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 8006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(rFP,%ecx,4) # v[B]<- %eax 8007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_LONG */ 8011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_continue: 8013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __divdi3 8014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_finish: 8015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 8016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 8017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 8019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_check_zero: 8024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial 8026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_check_neg1: 8029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,%eax 8030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial 8031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 8032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 8033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial1 8035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial1 8037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%edx 8040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_finish 8041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_LONG */ 8043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_continue: 8045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __moddi3 8046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_finish: 8047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,%ecx 8048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 8049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 8051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_check_zero: 8056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial 8058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_check_neg1: 8061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,%eax 8062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial 8063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,%ecx,0) 8064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,%ecx,1) 8065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial1 8067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial1 8069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 8072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_finish 8073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHL_LONG */ 8075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHL_LONG_finish: 8077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[AA+0]<- %eax 8078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHR_LONG */ 8082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHR_LONG_finish: 8085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[AA+0]<- eax 8086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_USHR_LONG */ 8090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_USHR_LONG_finish: 8093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) # v[BB+0]<- eax 8094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT_2ADDR */ 8099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_2ADDR_continue_div2addr: 8100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_2ADDR_finish_div2addr: 8103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 8104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT_2ADDR */ 8110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_2ADDR_continue_div2addr: 8111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_2ADDR_finish_div2addr: 8114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%edx,rINST_FULL) 8115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MUL_LONG_2ADDR */ 8121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MUL_LONG_2ADDR_continue: 8123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%edx),%edx # full result now in %edx:%eax 8124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,4(rIBASE) # v[A+1]<- %edx 8125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) # restore rPC/%edx 8126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(rIBASE) # v[A]<- %eax 8128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 8129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rIBASE) 8130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_LONG_2ADDR */ 8134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_continue: 8136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 8137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) 8138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 8139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __divdi3 8140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_finish: 8141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 8142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 8143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 8145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_check_zero: 8150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial 8152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_check_neg1: 8155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,%eax 8156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial 8157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 8158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 8159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial1 8161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial1 8163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%edx 8166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_2ADDR_finish 8167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_LONG_2ADDR */ 8169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_continue: 8171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 8172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC,OUT_ARG0(%esp) 8173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 8174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __moddi3 8175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_finish: 8176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,%ecx 8177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(rPC,%ecx,1) 8178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,%ecx,0) 8180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_check_zero: 8185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial 8187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_check_neg1: 8190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,%eax 8191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial 8192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(rPC,rINST_FULL,0) 8193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG_WORD(%ecx,rINST_FULL,1) 8194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl rPC,rPC 8195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial1 8196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial1 8198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 8201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_2ADDR_finish 8202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHL_LONG_2ADDR */ 8204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHL_LONG_2ADDR_finish: 8207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0]<- eax 8208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHR_LONG_2ADDR */ 8213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHR_LONG_2ADDR_finish: 8216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0]<- eax 8217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_USHR_LONG_2ADDR */ 8222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_USHR_LONG_2ADDR_finish: 8225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG_WORD(%eax,rINST_FULL,0) # v[AA+0]<- eax 8226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 8227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 8228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT_LIT16 */ 8231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT16_continue_div: 8232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT16_finish_div: 8235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 8236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT_LIT16 */ 8242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT16_continue_div: 8243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT16_finish_div: 8246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%edx,rINST_FULL) 8247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT_LIT8 */ 8253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT8_continue_div: 8254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT8_finish_div: 8257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%eax,rINST_FULL) 8258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT_LIT8 */ 8264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT8_continue_div: 8265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT8_finish_div: 8268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG(%edx,rINST_FULL) 8269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(2) 8271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(2) 8272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_EXECUTE_INLINE */ 8275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_EXECUTE_INLINE_continue: 8277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Extract args, call function. 8279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = #of args (0-4) 8280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = call index 8281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @esp = return addr 8282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * esp is -4 from normal 8283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go ahead and load all 4 args, even if not used. 8285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),rPC 8287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx 8290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 8291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rPC 8292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG0(%esp) 8293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx 8296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 8297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rPC 8298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG1(%esp) 8299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx 8302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 8303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rPC 8304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG2(%esp) 8305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl rPC,%ecx 8308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) 8309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,rPC 8310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG3(%esp) 8311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $4,%eax # index *= sizeof(table entry) 8313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp *gDvmInlineOpsTable(%eax) 8314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # will return to caller of .LOP_EXECUTE_INLINE_continue 8315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size dvmAsmSisterStart, .-dvmAsmSisterStart 8317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmSisterEnd 8318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterEnd: 8319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/entry.S */ 8321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 8323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 8325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 8326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 8327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 8329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 8331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 8332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 8334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 8335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 8339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdRun 8340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdRun, %function 8341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bool dvmMterpStdRun(MterpGlue* glue) 8343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interpreter entry point. Returns changeInterp. 8345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdRun: 8348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebp 8349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %esp,%ebp 8350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %edi 8351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %esi 8352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebx 8353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* at this point, stack is misaligned by 1 word 8355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project We're allocating spill space for 6 words, plus 8356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project outgoing argument (5 words) and local variables 8357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (4 words) - 15 words or 60 bytes total. See 8358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project diagram in header.S 8359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 8360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl $60,%esp 8361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Set up "named" registers */ 8363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl IN_ARG0(%ebp),%ecx 8364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,rGLUE_SPILL(%ebp) 8365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_PC_FROM_GLUE(%ecx) 8366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_FP_FROM_GLUE(%ecx) 8367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $dvmAsmInstructionStart,rIBASE 8368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Remember %esp for future "longjmp" */ 8370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %esp,offGlue_bailPtr(%ecx) 8371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* How to start? */ 8373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb offGlue_entryPoint(%ecx),%al 8374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Normal start? */ 8376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryInstr,%al 8377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .Lnot_instr 8378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Normal case: start executing the instruction at rPC */ 8380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 8381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lnot_instr: 8384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Reset to normal case */ 8385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $kInterpEntryInstr,offGlue_entryPoint(%ecx) 8386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryReturn,%al 8387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_returnFromMethod 8388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryThrow,%al 8389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 8390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx %al,%eax 8391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrBadEntryPoint,OUT_ARG0(%esp) 8393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call printf 8394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAbort 8395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Not reached */ 8396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdBail 8399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdBail, %function 8400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * void dvmMterpStdBail(MterpGlue* glue, bool changeInterp) 8402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Restore the stack pointer and PC from the save point established on entry. 8404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is essentially the same as a longjmp, but should be cheaper. The 8405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * last instruction causes us to return to whoever called dvmMterpStdRun. 8406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We're not going to build a standard frame here, so the arg accesses will 8408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * look a little strange. 8409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * esp+4 (arg0) MterpGlue* glue 8412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * esp+8 (arg1) bool changeInterp 8413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdBail: 8415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%esp),%ecx # grab glue 8416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 8(%esp),%eax # changeInterp to return reg 8417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_bailPtr(%ecx),%esp # Stack back to normal 8418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl $60,%esp # Strip dvmMterpStdRun's frame 8419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %ebx 8420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %esi 8421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %edi 8422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %ebp 8423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ret # return to dvmMterpStdRun's caller 8424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Strings 8428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .section .rodata 8430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrBadEntryPoint: 8431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Bad entry point %d\n" 8432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/footer.S */ 8434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 8436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 8438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 8439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 8440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 8442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 8444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 8445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 8447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 8448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common subroutines and data. 8451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code when a backwards branch is taken 8455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ebx (a.k.a. rINST_FULL) -> PC adjustment in 16-bit words 8458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_backwardBranch: 8460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 8461c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch call common_periodicChecks # Note: expects rPC to be preserved 8462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC_INDEXED(rINST_FULL) 8463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 8464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8466c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8467c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8468c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch/* 8469c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Common code for method invocation with range. 8470c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * 8471c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * On entry: 8472c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * eax = Method* methodToCall 8473c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * rINST trashed, must reload 8474c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8475c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8476c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodRange: 8477c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewRange: 8478c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8479c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8480c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * prepare to copy args to "outs" area of current frame 8481c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8482c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8483c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzbl 1(rPC),rINST_FULL # rINST_FULL<- AA 8484c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl 4(rPC), %ecx # %ecx<- CCCC 8485c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SPILL(rPC) 8486c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%edx,rFP) # %edx<- &StackSaveArea 8487c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch test rINST_FULL, rINST_FULL 8488c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rINST_FULL, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- AA 8489c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jz .LinvokeArgsDone # no args; jump to args done 8490c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8491c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8492c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8493c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, %ecx=CCCC, LOCAL0_OFFSET(%ebp)=count, %edx=&outs (&stackSaveArea) 8494c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * (very few methods have > 10 args; could unroll for common cases) 8495c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8496c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8497c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ebx, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- save %ebx 8498c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea (rFP, %ecx, 4), %ecx # %ecx<- &vCCCC 8499c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shll $2, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- offset 8500c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl LOCAL0_OFFSET(%ebp), %edx # %edx<- update &outs 8501c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shrl $2, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- offset 8502c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1: 8503c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (%ecx), %ebx # %ebx<- vCCCC 8504c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%ecx), %ecx # %ecx<- &vCCCC++ 8505c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl $1, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET<- LOCAL0_OFFSET-- 8506c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ebx, (%edx) # *outs<- vCCCC 8507c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%edx), %edx # outs++ 8508c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne 1b # loop if count (LOCAL0_OFFSET(%ebp)) not zero 8509c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ebx # %ebx<- restore %ebx 8510c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp .LinvokeArgsDone # continue 8511c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8512c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8513c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax is "Method* methodToCall", the method we're trying to call 8514c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * prepare to copy args to "outs" area of current frame 8515c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8516c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8517c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodNoRange: 8518c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewNoRange: 8519c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzbl 1(rPC),rINST_FULL # rINST_FULL<- BA 8520c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SPILL(rPC) 8521c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rINST_FULL, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- BA 8522c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shrl $4, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- B 8523c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je .LinvokeArgsDone # no args; jump to args done 8524c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl 4(rPC), %ecx # %ecx<- GFED 8525c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%edx,rFP) # %edx<- &StackSaveArea 8526c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8527c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8528c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, %ecx=GFED, LOCAL0_OFFSET(%ebp)=count, %edx=outs 8529c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8530c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8531c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNonRange: 8532c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $2, LOCAL0_OFFSET(%ebp) # compare LOCAL0_OFFSET(%ebp) to 2 8533c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- GFED 8534c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl 1f # handle 1 arg 8535c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je 2f # handle 2 args 8536c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $4, LOCAL0_OFFSET(%ebp) # compare LOCAL0_OFFSET(%ebp) to 4 8537c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl 3f # handle 3 args 8538c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je 4f # handle 4 args 8539c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch5: 8540c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch andl $15, rINST_FULL # rINST<- A 8541c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 8542c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, rINST_FULL, 4), %ecx # %ecx<- vA 8543c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vA 8544c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 8545c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch4: 8546c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $12, %ecx # %ecx<- G 8547c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 8548c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vG 8549c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vG 8550c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 8551c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch3: 8552c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x0f00, %ecx # %ecx<- 0F00 8553c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $8, %ecx # %ecx<- F 8554c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 8555c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vF 8556c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vF 8557c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 8558c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch2: 8559c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x00f0, %ecx # %ecx<- 00E0 8560c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $4, %ecx # %ecx<- E 8561c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 8562c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vE 8563c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vE 8564c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 8565c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1: 8566c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x000f, %ecx # %ecx<- 000D 8567c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vD 8568c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, -4(%edx) # *--outs<- vD 8569c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch0: 8570c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8571c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8572c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax is "Method* methodToCall", the method we're trying to call 8573c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * find space for the new stack frame, check for overflow 8574c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8575c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8576c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeArgsDone: 8577c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl offMethod_registersSize(%eax), %edx # %edx<- methodToCall->regsSize 8578c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl offMethod_outsSize(%eax), %ecx # %ecx<- methodToCall->outsSize 8579c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET<- methodToCall 8580c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shl $2, %edx # %edx<- update offset 8581c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%eax,rFP) # %eax<- &StackSaveArea 8582c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl %edx, %eax # %eax<- newFP; (old savearea - regsSize) 8583c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%edx) # %edx<- pMterpGlue 8584c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- &outs 8585c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl $sizeofStackSaveArea, %eax # %eax<- newSaveArea (stack save area using newFP) 8586c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_interpStackEnd(%edx), %edx # %edx<- glue->interpStackEnd 8587c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, LOCAL2_OFFSET(%ebp) # LOCAL2_OFFSET<- glue->interpStackEnd 8588c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shl $2, %ecx # %ecx<- update offset for outsSize 8589c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, %edx # %edx<- newSaveArea 8590c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch sub %ecx, %eax # %eax<- bottom; (newSaveArea - outsSize) 8591c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp LOCAL2_OFFSET(%ebp), %eax # compare interpStackEnd and bottom 8592c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL0_OFFSET(%ebp), %eax # %eax<- restore methodToCall 8593c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl .LstackOverflow # handle frame overflow 8594c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8595c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8596c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * set up newSaveArea 8597c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8598c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8599c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#ifdef EASY_GDB 8600c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch SAVEAREA_FROM_FP(%ecx,rFP) # %ecx<- &StackSaveArea 8601c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, offStackSaveArea_prevSave(%edx) # newSaveArea->prevSave<- &outs 8602c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#endif 8603c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offStackSaveArea_prevFrame(%edx) # newSaveArea->prevFrame<- rFP 8604c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rPC_SPILL(%ebp), %ecx 8605c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, offStackSaveArea_savedPc(%edx) # newSaveArea->savedPc<- rPC 8606c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch testl $ACC_NATIVE, offMethod_accessFlags(%eax) # check for native call 8607c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, offStackSaveArea_method(%edx) # newSaveArea->method<- method to call 8608c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne .LinvokeNative # handle native call 8609c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8610c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8611c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Update "glue" values for the new method 8612c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFp 8613c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8614c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8615c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offMethod_clazz(%eax), %edx # %edx<- method->clazz 8616c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%ecx) # %ecx<- pMterpGlue 8617c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offClassObject_pDvmDex(%edx), %edx # %edx<- method->clazz->pDvmDex 8618c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, offGlue_method(%ecx) # glue->method<- methodToCall 8619c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, offGlue_methodClassDex(%ecx) # glue->methodClassDex<- method->clazz->pDvmDex 8620c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offMethod_insns(%eax), rPC # rPC<- methodToCall->insns 8621c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%ecx), %eax # %eax<- glue->self 8622c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), rFP # rFP<- newFP 8623c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offThread_curFrame(%eax) # glue->self->curFrame<- newFP 8624c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch FETCH_INST() 8625c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GOTO_NEXT # jump to methodToCall->insns 8626c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8627c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 8628c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Prep for the native call 8629c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFP, %edx=newSaveArea 8630c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 8631c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8632c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNative: 8633c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%ecx) # %ecx<- pMterpGlue 8634c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, OUT_ARG1(%esp) # push parameter methodToCall 8635c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%ecx), %ecx # %ecx<- glue->self 8636d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl offThread_jniLocal_topCookie(%ecx), %eax # %eax<- self->localRef->... 8637d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl %eax, offStackSaveArea_localRefCookie(%edx) # newSaveArea->localRefCookie<- top 8638c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, OUT_ARG4(%esp) # save newSaveArea 8639c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %edx # %edx<- newFP 8640c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, offThread_curFrame(%ecx) # glue->self->curFrame<- newFP 8641c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, OUT_ARG3(%esp) # save glue->self 8642c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, OUT_ARG2(%esp) # push parameter glue->self 8643c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%ecx) # %ecx<- pMterpGlue 8644c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG1(%esp), %eax # %eax<- methodToCall 8645c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea offGlue_retval(%ecx), %ecx # %ecx<- &retval 8646c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, OUT_ARG0(%esp) # push parameter pMterpGlue 8647c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch push %edx # push parameter newFP 8648c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8649c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch call *offMethod_nativeFunc(%eax) # call methodToCall->nativeFunc 8650c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%esp), %esp 8651c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG4(%esp), %ecx # %ecx<- newSaveArea 8652c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG3(%esp), %eax # %eax<- glue->self 8653d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl offStackSaveArea_localRefCookie(%ecx), %edx # %edx<- old top 8654c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $0, offThread_exception(%eax) # check for exception 8655c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offThread_curFrame(%eax) # glue->self->curFrame<- rFP 8656d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl %edx, offThread_jniLocal_topCookie(%eax) # new top <- old top 8657c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch UNSPILL(rPC) 8658c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_exceptionThrown # handle exception 8659c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch FETCH_INST_WORD(3) 8660c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch ADVANCE_PC(3) 8661c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GOTO_NEXT # jump to next instruction 8662c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 86636ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden.LstackOverflow: # eax=methodToCall 86646ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden movl %eax, OUT_ARG1(%esp) # push parameter methodToCall 8665c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GET_GLUE(%eax) # %eax<- pMterpGlue 8666c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%eax), %eax # %eax<- glue->self 8667c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, OUT_ARG0(%esp) # push parameter self 86686ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden call dvmHandleStackOverflow # call: (Thread* self, Method* meth) 8669c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch UNSPILL(rPC) # return: void 8670c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_exceptionThrown # handle exception 8671c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8672c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 8673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common invoke code (old-style). 8675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TUNING: Rewrite along lines of new armv5 code? 8676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = Method* methodToCall 8679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = bool methodCallRange 8680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST trashed, must reload 8681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_invokeOld: 8683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- methodCallRange 8684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 8685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl (rPC),rINST_FULL # recover rINST 8686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- method 8687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 8688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_TO_GLUE(%ecx) 8689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_FP_TO_GLUE(%ecx) 8690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL 8691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,OUT_ARG3(%esp)# arg3<- AA 8692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- GLUE 8693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG4(%esp) # arg4<- GFED/CCCC 8694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmMterp_invokeMethod 8695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_resumeAfterGlueCall 8696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Do we need the thread to be suspended or have debugger/profiling activity? 8700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ebx -> PC adjustment in 16-bit words (must be preserved) 8703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx -> GLUE pointer 8704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: A call will normally kill %eax, rPC/%edx and %ecx. To 8706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * streamline the normal case, this routine will preserve rPC and 8707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * %ecx in addition to the normal caller save regs. The save/restore 8708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is a bit ugly, but will happen in the relatively uncommon path. 8709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TUNING: Might be worthwhile to inline this. 8710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: Basic-block style Jit will need a hook here as well. Fold it into 8711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the suspendCount check so we can get both in 1 shot. 8712c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * TODO: to match the other intepreters, this should handle suspension 8713c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * and then check for debugger/profiling after dvmCheckSuspendPending 8714c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden * returns. 8715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_periodicChecks: 8717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_pSelfSuspendCount(%ecx),%eax # eax <- &suspendCount 8718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(%eax) 8719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 8720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) || defined(WITH_PROFILER) 8722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) 8723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_pDebuggerActive(%ecx),%eax # eax <- &DebuggerActive 8724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 8725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_PROFILER) 8726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_pActiveProfilers(%ecx),%ecx # ecx <- &ActiveProfilers 8727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 8728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_DEBUGGER) && defined(WITH_PROFILER) 8729c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden # TODO: check for NULL before load 8730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl (%eax),%eax # eax <- debuggerActive (boolean) 8731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (%ecx),%eax # eax <- debuggerActive || activeProfilers 8732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#elif defined(WITH_DEBUGGER) 8733c95e0fbce4f77b2b08eb48205e405793de0d4248Andy McFadden # TODO: check for NULL before load 8734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl (%eax),%eax # eax <- debuggerActive (boolean) 8735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#elif defined(WITH_PROFILER) 8736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx),%eax # eax <= activeProfilers 8737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 8738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) # restore rGLUE 8739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 8740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 3f # one or both active - switch interp 8741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 8742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ret 8744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Check for suspend */ 8746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 8747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point, the return pointer to the caller of 8748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * common_periodicChecks is on the top of stack. We need to preserve 8749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rPC(edx) and GLUE(ecx). We'll spill rPC, and reload GLUE. 8750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The outgoing profile is: 8751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bool dvmCheckSuspendPending(Thread* self) 8752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Because we reached here via a call, go ahead and build a new frame. 8753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 875499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project EXPORT_PC() # need for precise GC 8755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%eax # eax<- glue->self 8756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) # save edx 8757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebp 8758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %esp,%ebp 8759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl $24,%esp 8760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmCheckSuspendPending 8762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl $24,%esp 8763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %ebp 8764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 8766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ret 8767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Switch interpreters */ 8769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Note: %ebx contains the 16-bit word offset to be applied to rPC to 8770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "complete" the interpretation of backwards branches. In effect, we 8771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * are completing the interpretation of the branch instruction here, 8772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and the new interpreter will resume interpretation at the branch 8773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * target. However, a switch request recognized during the handling 8774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * of a return from method instruction results in an immediate abort, 8775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and the new interpreter will resume by re-interpreting the return 8776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction. 8777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: 8779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ebx,2),rPC # adjust pc to show target 8780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) # bail expect GLUE already loaded 8781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,rINST_FULL # set changeInterp to true 8782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_gotoBail 8783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for handling a return instruction 8787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_returnFromMethod: 8789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 8790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Set entry mode in case we bail */ 8791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $kInterpEntryReturn,offGlue_entryPoint(%ecx) 8792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl rINST_FULL,rINST_FULL # zero offset in case we switch interps 8793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call common_periodicChecks # Note: expects %ecx to be preserved 8794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVEAREA_FROM_FP(%eax,rFP) # eax<- saveArea (old) 8796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStackSaveArea_prevFrame(%eax),rFP # rFP<- prevFrame 8797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (offStackSaveArea_method-sizeofStackSaveArea)(rFP),rINST_FULL 8798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,rINST_FULL # break? 8799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_gotoBail # break frame, bail out completely 8800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStackSaveArea_savedPc(%eax),rPC # pc<- saveArea->savedPC 8802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%eax # eax<- self 8803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,offGlue_method(%ecx) # glue->method = newSave->meethod 8804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rFP,offThread_curFrame(%eax) # self->curFrame = fp 8805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(rINST_FULL),%eax # eax<- method->clazz 8806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(3) 8807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_pDvmDex(%eax),%eax # eax<- method->clazz->pDvmDex 8808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(3) 8809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_methodClassDex(%ecx) 8810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* not bailing - restore entry mode to default */ 8811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $kInterpEntryInstr,offGlue_entryPoint(%ecx) 8812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Prepare to strip the current frame and "longjump" back to caller of 8816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * dvmMterpStdRun. 8817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on entry: 8819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rINST_FULL holds changeInterp 8820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds glue pointer 8821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected profile: dvmMterpStdBail(MterpGlue *glue, bool changeInterp) 8823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_gotoBail: 8825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_TO_GLUE(%ecx) # export state to glue 8826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_FP_TO_GLUE(%ecx) 8827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # glue in arg0 8828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rINST_FULL,OUT_ARG1(%esp) # changeInterp in arg1 8829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmMterpStdBail # bail out.... 8830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * After returning from a "glued" function, pull out the updated values 8834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and start executing at the next instruction. 8835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project common_resumeAfterGlueCall: 8837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 8838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_PC_FROM_GLUE(%ecx) 8839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LOAD_FP_FROM_GLUE(%ecx) 8840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST() 8841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Integer divide or mod by zero 8845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errDivideByZero: 8847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrArithmeticException,%eax 8849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrDivideByZero,%eax 8851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 8853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 8854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size. 8859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNegativeArraySize: 8861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNegativeArraySizeException,%eax 8863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 8867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 8868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size. 8873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNoSuchMethod: 8875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNoSuchMethodError,%eax 8878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 8882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 8883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Hit a null object when we weren't expecting one. Export the PC, throw a 8888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * NullPointerException and goto the exception processing code. 8889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNullObject: 8891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNullPointerException,%eax 8893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 8897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 8898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array index exceeds max. 8903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayIndex: 8905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrArrayIndexException,%eax 8907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 8911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 8912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Invalid array value. 8916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayStore: 8918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() 8919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrArrayStoreException,%eax 8920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 8921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 8924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 8925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 8926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Somebody has thrown an exception. Handle it. 8930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the exception processing code returns to us (instead of falling 8932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out of the interpreter), continue with whatever the next instruction 8933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * now happens to be. 8934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This does not return. 8936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_exceptionThrown: 8938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_GLUE(%ecx) 8939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_PC_TO_GLUE(%ecx) 8940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SAVE_FP_TO_GLUE(%ecx) 8941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 8942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmMterp_exceptionThrown 8943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_resumeAfterGlueCall 8944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_abort: 8946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xdeadf00d,%eax 8947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call *%eax 8948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Strings 8952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .section .rodata 8955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNullPointerException: 8956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NullPointerException;" 8957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArithmeticException: 8958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArithmeticException;" 8959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrDivideByZero: 8960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "divide by zero" 8961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArrayIndexException: 8962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArrayIndexOutOfBoundsException;" 8963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArrayStoreException: 8964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArrayStoreException;" 8965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNegativeArraySizeException: 8966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NegativeArraySizeException;" 8967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInstantiationError: 8968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InstantiationError;" 8969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrClassCastException: 8970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ClassCastException;" 8971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNoSuchMethodError: 8972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NoSuchMethodError;" 8973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInternalError: 8974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InternalError;" 8975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrFilledNewArrayNotImpl: 8976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "filled-new-array only implemented for 'int'" 8977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8978