InterpAsm-x86.S revision 4570ad0a7706d3338d58bd0204e102719e4d68fb
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 494570ad0a7706d3338d58bd0204e102719e4d68fbEugene SuroveginStack must be 16-byte aligned to support SSE in native code. 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectIf we're not doing variable stack allocation (alloca), the frame pointer can be 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecteliminated and all arg references adjusted to be esp relative. 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectMterp notes: 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectSome key interpreter variables will be assigned to registers. Note that each 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectwill also have an associated spill location (mostly used useful for those assigned 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectto callee save registers). 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project nick reg purpose 61f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee rPC edi interpreted program counter, used for fetching instructions 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rFP esi interpreted frame pointer, used for accessing locals and args 63f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee rINSTw bx first 16-bit code of current instruction 64f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee rINSTbl bl opcode portion of instruction word 65f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee rINSTbh bh high byte of inst word, usually contains src/tgt reg names 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectNotes: 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project o High order 16 bits of ebx must be zero on entry to handler 69f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee o rPC, rFP, rINSTw/rINSTbl valid on handler entry and exit 70f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee o eax, edx and ecx are scratch, rINSTw/ebx sometimes scratch 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project o rPC is in the caller save set, and will be killed across external calls. Don't 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project forget to SPILL/UNSPILL it around call points 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 764570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin#define rGLUE 8(%ebp) 77f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rPC %esi 78f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rFP %edi 79f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINST %ebx 80f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINSTw %bx 81f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINSTbh %bh 82f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINSTbl %bl 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Frame diagram while executing dvmMterpStdRun, high to low addresses */ 864570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin#define IN_ARG0 ( 8) 874570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin#define CALLER_RP ( 4) 884570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin#define PREV_FP ( 0) /* <- dvmMterpStdRun ebp */ 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Spill offsets relative to %ebp */ 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define EDI_SPILL ( -4) 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define ESI_SPILL ( -8) 924570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin#define EBX_SPILL (-12) 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rPC_SPILL (-16) 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define rFP_SPILL (-20) 95f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINST_SPILL (-24) 96f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define TMP_SPILL1 (-28) 97f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define TMP_SPILL2 (-32) 98f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define TMP_SPILL3 (-36) 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL0_OFFSET (-40) 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL1_OFFSET (-44) 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL2_OFFSET (-48) 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define LOCAL3_OFFSET (-52) 1034570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin/* Out Arg offsets, relative to %esp */ 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG4 ( 16) 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG3 ( 12) 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG2 ( 8) 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG1 ( 4) 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define OUT_ARG0 ( 0) /* <- dvmMterpStdRun esp */ 1094570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin#define FRAME_SIZE 76 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define SPILL(reg) movl reg##,reg##_SPILL(%ebp) 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define UNSPILL(reg) movl reg##_SPILL(%ebp),reg 113f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define SPILL_TMP1(reg) movl reg,TMP_SPILL1(%ebp) 114f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define UNSPILL_TMP1(reg) movl TMP_SPILL1(%ebp),reg 115f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define SPILL_TMP2(reg) movl reg,TMP_SPILL2(%ebp) 116f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define UNSPILL_TMP2(reg) movl TMP_SPILL2(%ebp),reg 117f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define SPILL_TMP3(reg) movl reg,TMP_SPILL3(%ebp) 118f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define UNSPILL_TMP3(reg) movl TMP_SPILL3(%ebp),reg 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* save/restore the PC and/or FP from the glue struct */ 121f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro SAVE_PC_FP_TO_GLUE _reg 122f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,\_reg 123f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rPC,offGlue_pc(\_reg) 124f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rFP,offGlue_fp(\_reg) 125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 127f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro LOAD_PC_FP_FROM_GLUE 128f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,rFP 129f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_pc(rFP),rPC 130f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_fp(rFP),rFP 131f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* The interpreter assumes a properly aligned stack on entry, and 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * will preserve 16-byte alignment. 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "export" the PC to the interpreted stack frame, f/b/o future exception 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * objects. Must * be done *before* something calls dvmThrowException. 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "SAVEAREA_FROM_FP(fp)->xtra.currentPc = pc", i.e. 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fp - sizeof(StackSaveArea) + offsetof(SaveArea, xtra.currentPc) 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * It's okay to do this more than once. 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 146f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro EXPORT_PC 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC, (-sizeofStackSaveArea + offStackSaveArea_currentPc)(rFP) 148f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Given a frame pointer, find the stack save area. 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "((StackSaveArea*)(_fp) -1)". 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 155f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro SAVEAREA_FROM_FP _reg 156f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal -sizeofStackSaveArea(rFP), \_reg 157f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 160f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the next instruction from rPC into rINSTw. Does not advance rPC. 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 162f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST 163f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl (rPC),rINST 164f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 167f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the opcode byte and zero-extend it into _reg. Must be used 168f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * in conjunction with GOTO_NEXT_R 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 170f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST_R _reg 171f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (rPC),\_reg 172f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 175f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the opcode byte at _count words offset from rPC and zero-extend 176f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * it into _reg. Must be used in conjunction with GOTO_NEXT_R 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 178f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST_OPCODE _count _reg 179f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl \_count*2(rPC),\_reg 180f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 183f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the nth instruction word from rPC into rINSTw. Does not advance 184f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rPC, and _count is in words 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 186f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST_WORD _count 187f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl \_count*2(rPC),rINST 188f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 191f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch instruction word indexed (used for branching). 192f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Index is in instruction word units. 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 194f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST_INDEXED _reg 195f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl (rPC,\_reg,2),rINST 196f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 199f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Advance rPC by instruction count 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 201f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro ADVANCE_PC _count 202f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal 2*\_count(rPC),rPC 203f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 206f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Advance rPC by branch offset in register 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 208f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro ADVANCE_PC_INDEXED _reg 209f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rPC,\_reg,2),rPC 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 211f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.macro GOTO_NEXT 213f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%eax 214f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbh,rINST 215f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,%eax,4) 216f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 217f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 218f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 219f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Version of GOTO_NEXT that assumes _reg preloaded with opcode. 220f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Should be paired with FETCH_INST_R 221f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 222f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro GOTO_NEXT_R _reg 223f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC),rINST 224f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_reg,4) 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get/set the 32-bit value from a Dalvik register. 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 230f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro GET_VREG_R _reg _vreg 231f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (rFP,\_vreg,4),\_reg 232f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 233f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 234f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro SET_VREG _reg _vreg 235f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl \_reg,(rFP,\_vreg,4) 236f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 237f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 238f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro GET_VREG_WORD _reg _vreg _offset 239f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4*(\_offset)(rFP,\_vreg,4),\_reg 240f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 241f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 242f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro SET_VREG_WORD _reg _vreg _offset 243f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl \_reg,4*(\_offset)(rFP,\_vreg,4) 244f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 245f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 246f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#if 1 247f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 248f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rFinish %edx 249f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 250f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/* Macros for x86-atom handlers */ 251f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 252f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Get the 32-bit value from a dalvik register. 253f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 254f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 255f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro GET_VREG _vreg 256f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (rFP,\_vreg, 4), \_vreg 257f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 258f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 259f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 260f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the next instruction from the specified offset. Advances rPC 261f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * to point to the next instruction. "_count" is in 16-bit code units. 262f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * 263f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * This must come AFTER anything that can throw an exception, or the 264f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * exception catch may miss. (This also implies that it must come after 265f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * EXPORT_PC()) 266f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 267f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 268f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH_ADVANCE_INST _count 269f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee add $(\_count*2), rPC 270f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl (rPC), rINST 271f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 272f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 273f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 274f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the next instruction from an offset specified by _reg. Updates 275f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rPC to point to the next instruction. "_reg" must specify the distance 276f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * in bytes, *not* 16-bit code units, and may be a signed value. 277f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 278f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 279f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH_ADVANCE_INST_RB _reg 280f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl \_reg, rPC 281f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl (rPC), rINST 282f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 283f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 284f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 285f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch a half-word code unit from an offset past the current PC. The 286f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * "_count" value is in 16-bit code units. Does not advance rPC. 287f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * For example, given instruction of format: AA|op BBBB, it 288f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * fetches BBBB. 289f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 290f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 291f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH _count _reg 292f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl (\_count*2)(rPC), \_reg 293f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 294f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 295f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 296f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch a half-word code unit from an offset past the current PC. The 297f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * "_count" value is in 16-bit code units. Does not advance rPC. 298f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * This variant treats the value as signed. 299f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 300f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 301f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCHs _count _reg 302f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl (\_count*2)(rPC), \_reg 303f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 304f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 305f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 306f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the first byte from an offset past the current PC. The 307f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * "_count" value is in 16-bit code units. Does not advance rPC. 308f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * For example, given instruction of format: AA|op CC|BB, it 309f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * fetches BB. 310f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 312f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH_BB _count _reg 313f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2)(rPC), \_reg 314f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 315f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 316f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 317f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the second byte from an offset past the current PC. The 318f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * "_count" value is in 16-bit code units. Does not advance rPC. 319f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * For example, given instruction of format: AA|op CC|BB, it 320f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * fetches CC. 321f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 322f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 323f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH_CC _count _reg 324f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2 + 1)(rPC), \_reg 325f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 326f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 327f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 328f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the second byte from an offset past the current PC. The 329f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * "_count" value is in 16-bit code units. Does not advance rPC. 330f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * This variant treats the value as signed. 331f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 332f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 333f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH_CCs _count _reg 334f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movsbl (\_count*2 + 1)(rPC), \_reg 335f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 336f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 337f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 338f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 339f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch one byte from an offset past the current PC. Pass in the same 340f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * "_count" as you would for FETCH, and an additional 0/1 indicating which 341f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * byte of the halfword you want (lo/hi). 342f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 343f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 344f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH_B _reg _count _byte 345f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2+\_byte)(rPC), \_reg 346f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 347f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 348f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 349f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Put the instruction's opcode field into the specified register. 350f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 351f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro GET_INST_OPCODE _reg 353f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl, \_reg 354f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 355f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 356f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 357f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Begin executing the opcode in _reg. 358f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 359f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 360f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro GOTO_OPCODE _reg 361f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shl $6, \_reg 362f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $dvmAsmInstructionStart,\_reg 363f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *\_reg 364f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 365f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 366f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 367f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 368f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Macros pair attempts to speed up FETCH_INST, GET_INST_OPCODE and GOTO_OPCODE 370f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * by using a jump table. _rFinish should must be the same register for 371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * both macros. 372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 373f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 374f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FFETCH _rFinish 375f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (rPC), \_rFinish 376f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 377f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 378f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FGETOP_JMPa _rFinish 379f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC), rINST 380f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_rFinish, 4) 381f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 382f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 383f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 384f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Macro pair attempts to speed up FETCH_INST, GET_INST_OPCODE and GOTO_OPCODE 385f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * by using a jump table. _rFinish and _count should must be the same register for 386f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * both macros. 387f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 389f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FFETCH_ADV _count _rFinish 390f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2)(rPC), \_rFinish 391f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 392f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 393f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FGETOP_JMP _count _rFinish 394f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2 + 1)(rPC), rINST 395f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $(\_count*2), rPC 396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_rFinish, 4) 397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 398f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 399f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FGETOP_JMP2 _rFinish 400f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC), rINST 401f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_rFinish, 4) 402f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 403f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 404f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_1 _count _rFinish 405f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2)(rPC), \_rFinish 406f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shl $6, \_rFinish 407f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 408f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 409f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_2 _rFinish 410f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $dvmAsmInstructionStart,\_rFinish 411f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 412f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 413f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_3 _count 414f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $(\_count*2), rPC 415f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 416f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 417f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_4 _rFinish 418f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC), rINST 419f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *\_rFinish 420f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 421f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 422f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_A_1 _reg _rFinish 423f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (rPC, \_reg), \_rFinish 424f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shl $6, \_rFinish 425f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 426f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 427f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_A_2 _rFinish 428f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $dvmAsmInstructionStart,\_rFinish 429f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 430f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 431f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_A_3 _reg _rFinish 432f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl \_reg, rPC 433f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC, \_reg), rINST 434f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *\_rFinish 435f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 436f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 437f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Macro pair attempts to speed up FETCH_INST, GET_INST_OPCODE and GOTO_OPCODE 439f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * by using a jump table. _rFinish and _reg should must be the same register for 440f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * both macros. 441f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 442f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 443f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FFETCH_ADV_RB _reg _rFinish 444f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_reg, rPC), \_rFinish 445f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 446f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 447f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FGETOP_RB_JMP _reg _rFinish 448f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(\_reg, rPC), rINST 449f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl \_reg, rPC 450f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_rFinish, 4) 451f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 453f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 454f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up FETCH_INST, GET_INST_OPCODE using 455f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * a jump table. This macro should be called before FINISH_JMP where 456f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rFinish should be the same register containing the opcode value. 457f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * This is an attempt to split up FINISH in order to reduce or remove 458f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * potential stalls due to the wait for rFINISH. 459f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 460f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 461f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH_FETCH _rFinish 462f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (rPC), \_rFinish 463f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC), rINST 464f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 465f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 466f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 467f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 468f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up FETCH_ADVANCE_INST, GET_INST_OPCODE using 469f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * a jump table. This macro should be called before FINISH_JMP where 470f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rFinish should be the same register containing the opcode value. 471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * This is an attempt to split up FINISH in order to reduce or remove 472f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * potential stalls due to the wait for rFINISH. 473f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 474f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 475f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH_FETCH_ADVANCE _count _rFinish 476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2)(rPC), \_rFinish 477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2 + 1)(rPC), rINST 478f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $(\_count*2), rPC 479f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 480f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 481f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 482f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up FETCH_ADVANCE_INST_RB, GET_INST_OPCODE using 483f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * a jump table. This macro should be called before FINISH_JMP where 484f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rFinish should be the same register containing the opcode value. 485f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * This is an attempt to split up FINISH in order to reduce or remove 486f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * potential stalls due to the wait for rFINISH. 487f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 488f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 489f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH_FETCH_ADVANCE_RB _reg _rFinish 490f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_reg, rPC), \_rFinish 491f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(\_reg, rPC), rINST 492f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl \_reg, rPC 493f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 495f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 496f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up GOTO_OPCODE using a jump table. This macro should 497f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * be called after a FINISH_FETCH* instruction where rFinish should be the 498f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * same register containing the opcode value. This is an attempt to split up 499f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * FINISH in order to reduce or remove potential stalls due to the wait for rFINISH. 500f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 501f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 502f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH_JMP _rFinish 503f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_rFinish, 4) 504f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 505f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 506f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 507f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up FETCH_INST, GET_INST_OPCODE, GOTO_OPCODE by using 508f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * a jump table. Uses a single macro - but it should be faster if we 509f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * split up the fetch for rFinish and the jump using rFinish. 510f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 511f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 512f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH_A 513f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (rPC), rFinish 514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC), rINST 515f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,rFinish, 4) 516f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 517f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 518f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 519f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up FETCH_ADVANCE_INST, GET_INST_OPCODE, 520f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * GOTO_OPCODE by using a jump table. Uses a single macro - 521f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * but it should be faster if we split up the fetch for rFinish 522f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * and the jump using rFinish. 523f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 524f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 525f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH _count 526f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2)(rPC), rFinish 527f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2 + 1)(rPC), rINST 528f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $(\_count*2), rPC 529f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,rFinish, 4) 530f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 531f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 532f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 533f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up FETCH_ADVANCE_INST_RB, GET_INST_OPCODE, 534f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * GOTO_OPCODE by using a jump table. Uses a single macro - 535f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * but it should be faster if we split up the fetch for rFinish 536f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * and the jump using rFinish. 537f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 538f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 539f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH_RB _reg _rFinish 540f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_reg, rPC), \_rFinish 541f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(\_reg, rPC), rINST 542f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl \_reg, rPC 543f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_rFinish, 4) 544f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 545f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 546f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define sReg0 LOCAL0_OFFSET(%ebp) 547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define sReg1 LOCAL1_OFFSET(%ebp) 548f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define sReg2 LOCAL2_OFFSET(%ebp) 549f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define sReg3 LOCAL3_OFFSET(%ebp) 550f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 551f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 552f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Hard coded helper values. 553f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 554f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 555f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.balign 16 556f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 557f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LdoubNeg: 558f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x8000000000000000 559f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 560f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.L64bits: 561f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0xFFFFFFFFFFFFFFFF 562f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 563f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LshiftMask2: 564f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x0000000000000000 565f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LshiftMask: 566f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x000000000000003F 567f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 568f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.Lvalue64: 569f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x0000000000000040 570f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 571f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LvaluePosInfLong: 572f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x7FFFFFFFFFFFFFFF 573f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 574f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LvalueNegInfLong: 575f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x8000000000000000 576f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 577f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LvalueNanLong: 578f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x0000000000000000 579f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 580f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LintMin: 581f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long 0x80000000 582f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LintMax: 584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long 0x7FFFFFFF 585f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#endif 586f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is a #include, not a %include, because we want the C pre-processor 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to expand the macros into assembler assignment statements. 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "../common/asm-constants.h" 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmInstructionStart 596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmAsmInstructionStart, %function 597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionStart = .L_OP_NOP 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOP: /* 0x00 */ 603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOP.S */ 604f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 605f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 606f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE: /* 0x01 */ 611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 614f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- BA 615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 616f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shrl $4,rINST # rINST<- B 617f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 618f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 619f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 620f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax # fp[A]<-fp[B] 621f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_FROM16: /* 0x02 */ 626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */ 627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 629f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%eax # eax <= AA 630f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movw 2(rPC),rINSTw # rINSTw <= BBBB 631f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST # ecx<- fp[BBBB] 632f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 633f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 634f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax # fp[AA]<- ecx] 635f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_16: /* 0x03 */ 640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_16.S */ 641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 645f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 646f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 647f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 648f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 649f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE: /* 0x04 */ 654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE.S */ 655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide vA, vB */ 656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 657f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx <- BA 658f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 659f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax rINST 0 # eax<- v[B+0] 660f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST rINST 1 # rINST<- v[B+1] 661f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 662f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 663f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD rINST %ecx 1 # v[A+1]<- rINST 664f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 665f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax %ecx 0 # v[A+0]<- eax 666f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_FROM16: /* 0x05 */ 671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE_FROM16.S */ 672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/from16 vAA, vBBBB */ 673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 675f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- AAAA 676f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST %ecx 0 # rINST<- v[BBBB+0] 677f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # ecx<- v[BBBB+1] 678f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 679f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 680f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD rINST %eax 0 # v[AAAA+0]<- rINST 681f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx %eax 1 # v[AAAA+1]<- eax 682f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_16: /* 0x06 */ 687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE_16.S */ 688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/16 vAAAA, vBBBB */ 689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 692f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST %ecx 0 # rINSTw_WORD<- v[BBBB+0] 693f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # ecx<- v[BBBB+1] 694f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 695f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD rINST %eax 0 # v[AAAA+0]<- rINST 696f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 697f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx %eax 1 # v[AAAA+1]<- ecx 698f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT: /* 0x07 */ 703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT.S */ 704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 707f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- BA 708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 709f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shrl $4,rINST # rINST<- B 710f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 711f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 712f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 713f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax # fp[A]<-fp[B] 714f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_FROM16: /* 0x08 */ 720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_FROM16.S */ 721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */ 722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 724f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%eax # eax <= AA 725f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movw 2(rPC),rINSTw # rINSTw <= BBBB 726f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST # ecx<- fp[BBBB] 727f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 728f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 729f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax # fp[AA]<- ecx] 730f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_16: /* 0x09 */ 736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_16.S */ 737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_16.S */ 738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 742f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 743f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 744f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 745f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 746f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT: /* 0x0a */ 752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */ 753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 755f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax # eax<- rGLUE 756f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- AA 757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_retval(%eax),%eax # eax<- glue->retval.l 758f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 759f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 760f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # fp[AA]<- retval.l 761f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_WIDE: /* 0x0b */ 766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT_WIDE.S */ 767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-result-wide vAA */ 768f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_retval(%ecx),%eax 770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4+offGlue_retval(%ecx),%ecx 771f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 772f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[AA+0] <- eax 773f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx rINST 1 # v[AA+1] <- ecx 774f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 775f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_OBJECT: /* 0x0c */ 780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT_OBJECT.S */ 781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */ 782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 784f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax # eax<- rGLUE 785f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- AA 786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_retval(%eax),%eax # eax<- glue->retval.l 787f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 788f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 789f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # fp[AA]<- retval.l 790f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_EXCEPTION: /* 0x0d */ 796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_EXCEPTION.S */ 797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-exception vAA */ 798f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offThread_exception(%ecx),%eax # eax<- dvmGetException bypass 801f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST # fp[AA]<- exception object 802f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 803f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,offThread_exception(%ecx) # dvmClearException bypass 805f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_VOID: /* 0x0e */ 810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_VOID.S */ 811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN: /* 0x0f */ 816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN.S */ 817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 824f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 825f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.i <- AA 827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_WIDE: /* 0x10 */ 832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_WIDE.S */ 833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 64-bit value. Copies the return value into the "glue" 835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* return-wide vAA */ 838f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 839f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax rINST 0 # eax<- v[AA+0] 840f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST rINST 1 # rINST<- v[AA+1] 841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) 842f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,4+offGlue_retval(%ecx) 843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_OBJECT: /* 0x11 */ 848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_OBJECT.S */ 849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN.S */ 850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a 32-bit value. Copies the return value into the "glue" 852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 857f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 858f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.i <- AA 860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_4: /* 0x12 */ 866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_4.S */ 867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/4 vA, #+B */ 868f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movsx rINSTbl,%eax # eax<-ssssssBx 869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 870f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %eax,%ecx # ecx<- A 871f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 872f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax 874f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 875f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_16: /* 0x13 */ 880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_16.S */ 881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/16 vAA, #+BBBB */ 882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssBBBB 883f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax # eax<- AA 884f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 885f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 886f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax # vAA<- ssssBBBB 887f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST: /* 0x14 */ 892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST.S */ 893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const vAA, #+BBBBbbbb */ 894f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 2(rPC),%eax # grab all 32 bits at once 895f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%ecx # ecx<- AA 896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 897f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 898f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # vAA<- eax 899f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_HIGH16: /* 0x15 */ 904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_HIGH16.S */ 905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/high16 vAA, #+BBBB0000 */ 906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- 0000BBBB 907f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%ecx # ecx<- AA 908f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 909f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,%eax # eax<- BBBB0000 911f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # vAA<- eax 912f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_16: /* 0x16 */ 917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_16.S */ 918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/16 vAA, #+BBBB */ 919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%eax # eax<- ssssBBBB 920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # rPC:eax<- ssssssssssssBBBB 921f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # store msw 922f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 923f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # store lsw 924f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 925f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_32: /* 0x17 */ 930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_32.S */ 931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/32 vAA, #+BBBBbbbb */ 932f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 2(rPC),%eax # eax<- BBBBbbbb 933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # rPC:eax<- ssssssssssssBBBB 934f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST,1 # store msw 935f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 936f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # store lsw 937f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 938f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE: /* 0x18 */ 943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE.S */ 944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide vAA, #+HHHHhhhhBBBBbbbb */ 945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # eax<- lsw 946f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- AA 947f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 6(rPC),rINST # rINST<- msw 948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),%ecx # dst addr 949f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,4(%ecx) 950f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 5 %edx 951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(%ecx) 952f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 5 953f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_HIGH16: /* 0x19 */ 958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_HIGH16.S */ 959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/high16 vAA, #+BBBB000000000000 */ 960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- 0000BBBB 961f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 962f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,%eax # eax<- BBBB0000 964f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[AA+1]<- eax 965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 966f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[AA+0]<- eax 967f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING: /* 0x1a */ 972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_STRING.S */ 973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBB */ 975f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings 979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResString[BBBB] 980f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%ecx 981f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_STRING_resolve 984f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # vAA<- rResString[BBBB] 985f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 986f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING_JUMBO: /* 0x1b */ 991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_STRING_JUMBO.S */ 992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBBBBBB */ 994f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # eax<- BBBBBBBB 996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings 998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResString[BBBB] 999f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%ecx 1000f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_STRING_JUMBO_resolve 1003f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # vAA<- rResString[BBBB] 1004f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 1005f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_CLASS: /* 0x1c */ 1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_CLASS.S */ 1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/class vAA, Class@BBBB */ 1013f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx# ecx<- glue->methodClassDex 1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- dvmDex->pResClasses 1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResClasses[BBBB] 1018f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%ecx 1019f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_CLASS_resolve 1022f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # vAA<- rResClasses[BBBB] 1023f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1024f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_ENTER: /* 0x1d */ 1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MONITOR_ENTER.S */ 1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Synchronize on an object. 1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-enter vAA */ 1034f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 1035f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 1037f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_WORD 1 1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 1039f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # need for precise GC, MONITOR_TRACKING 1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_MONITOR_ENTER_continue 1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_EXIT: /* 0x1e */ 1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MONITOR_EXIT.S */ 1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlock an object. 1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Exceptions that occur when unlocking a monitor need to appear as 1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if they happened at the following instruction. See the Dalvik 1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction spec. 1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-exit vAA */ 1055f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST 1056f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 1057f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 1059668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee je .LOP_MONITOR_EXIT_errNullObject # go if so 1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MONITOR_EXIT_continue 1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CHECK_CAST: /* 0x1f */ 1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CHECK_CAST.S */ 1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if a cast from one class to another is allowed. 1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* check-cast vAA, class@BBBB */ 1073f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 1074f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST,rINST # rINST<- vAA (object) 1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 1077f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST # is oject null? 1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CHECK_CAST_okay # null obj, cast always succeeds 1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved class 1081f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offObject_clazz(rINST),%ecx # ecx<- obj->clazz 1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # have we resolved this before? 1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CHECK_CAST_resolve # no, go do it now 1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolved: 1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl %eax,%ecx # same class (trivial success)? 1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_CHECK_CAST_fullcheck # no, do full check 1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_okay: 1088f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1089f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1090f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INSTANCE_OF: /* 0x20 */ 1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INSTANCE_OF.S */ 1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if an object reference is an instance of a class. 1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Most common situation is a non-null object, being compared against 1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an already-resolved class. 1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* instance-of vA, vB, class@CCCC */ 1103f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax # eax<- BA 1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 1105f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB (obj) 1106f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # object null? 1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 1109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_store # null obj, not instance, store it 1110f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- CCCC 1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 1112f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%ecx,%edx,4),%ecx # ecx<- resolved class 1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- obj->clazz 1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # have we resolved this before? 1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_resolve # not resolved, do it now 1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolved: # eax<- obj->clazz, ecx<- resolved class 1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl %eax,%ecx # same class (trivial success)? 1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_trivial # yes, trivial finish 1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INSTANCE_OF_fullcheck # no, do full check 1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ARRAY_LENGTH: /* 0x21 */ 1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ARRAY_LENGTH.S */ 1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the length of an array. 1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1128f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee mov rINST,%eax # eax<- BA 1129f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1130f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST # ecx<- vB (object ref) 1131f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%al # eax<- A 1132f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # is null? 1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 1134f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_length(%ecx),%ecx 1136f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 1137f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 1138f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_INSTANCE: /* 0x22 */ 1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEW_INSTANCE.S */ 1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new instance of a class. 1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-instance vAA, class@BBBB */ 1148f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 1151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 1152f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved class 1154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # resolved? 1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_NEW_INSTANCE_resolve # no, go do it 1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolved: # on entry, ecx<- class 1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $CLASS_INITIALIZED,offClassObject_status(%ecx) 1158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_NEW_INSTANCE_initialized 1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_NEW_INSTANCE_needinit 1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_ARRAY: /* 0x23 */ 1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEW_ARRAY.S */ 1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Allocate an array of objects, specified with the array class 1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and a count. 1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The verifier guarantees that this is an array class, so we don't 1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check for it here. 1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-array vA, vB, class@CCCC */ 1173f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 1174f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- CCCC 1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved class 1179f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax 1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 1181f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB (array length) 1182f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 1183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_errNegativeArraySize # bail 1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_ARRAY_finish # yes, fast path 1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_NEW_ARRAY_resolve # resolve now 1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY: /* 0x24 */ 1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */ 1193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 1195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 1200f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%eax),%eax # eax<- pDvmDex->pResClasses 1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved class 1205f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_continue # yes, continue 1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # less frequent path, so we'll redo some work 1209f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- BBBB 1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FILLED_NEW_ARRAY_more 1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY_RANGE: /* 0x25 */ 1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY_RANGE.S */ 1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */ 1220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 1227f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%eax),%eax # eax<- pDvmDex->pResClasses 1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved class 1232f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_RANGE_continue # yes, continue 1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # less frequent path, so we'll redo some work 1236f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- BBBB 1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FILLED_NEW_ARRAY_RANGE_more 1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILL_ARRAY_DATA: /* 0x26 */ 1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILL_ARRAY_DATA.S */ 1247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* fill-array-data vAA, +BBBBBBBB */ 1248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 1250f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST 1251f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 1252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 1254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandleFillArrayData 1255f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 1256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # exception thrown? 1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 1258f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 1259f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_THROW: /* 0x27 */ 1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_THROW.S */ 1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception object in the current thread. 1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* throw vAA */ 1269f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 1270f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 1271f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- exception object 1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%ecx # ecx<- glue->self 1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offThread_exception(%ecx) # thread->exception<- obj 1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO: /* 0x28 */ 1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO.S */ 1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 8-bit offset. 1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset, which we need to 1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * double to get a byte offset. 1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto +AA */ 1289f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movsbl rINSTbl,rINST # ebx<- ssssssAA 1290f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST # test for <0 1291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1292f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1293f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1294f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_16: /* 0x29 */ 1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO_16.S */ 1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 16-bit offset. 1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset 1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/16 +AAAA */ 1307f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # rINST<- ssssAAAA 1308f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST # test for <0 1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1310f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1312f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_32: /* 0x2a */ 1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO_32.S */ 1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 32-bit offset. 1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset. 1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlike most opcodes, this one is allowed to branch to itself, so 1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * our "backward branch" test must be "<=0" instead of "<0". 1326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/32 AAAAAAAA */ 1328f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 2(rPC),rINST # rINST<- AAAAAAAA 1329f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,rINST # test for <= 0 1330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle common_backwardBranch 1331f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1332f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1333f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_PACKED_SWITCH: /* 0x2b */ 1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */ 1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1350f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 2(rPC),%ecx # ecx<- BBBBbbbb 1351f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 1352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 1353f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %eax,OUT_ARG1(%esp) # ARG1<- vAA 1354f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %ecx,OUT_ARG0(%esp) # ARG0<- switchData 1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandlePackedSwitch 1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 1357f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %eax,rINST # set up word offset 1358f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jle common_backwardBranch # check on special actions 1359f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED rINST 1360f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPARSE_SWITCH: /* 0x2c */ 1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPARSE_SWITCH.S */ 1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */ 1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 1370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 1371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 1373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1378f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 2(rPC),%ecx # ecx<- BBBBbbbb 1379f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 1380f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 1381f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %eax,OUT_ARG1(%esp) # ARG1<- vAA 1382f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %ecx,OUT_ARG0(%esp) # ARG0<- switchData 1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandleSparseSwitch 1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 1385f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %eax,rINST # set up word offset 1386f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jle common_backwardBranch # check on special actions 1387f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED rINST 1388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 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_CMPL_FLOAT: /* 0x2d */ 1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPL_FLOAT.S */ 1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 1401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1411f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1412f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPL_FLOAT_isNaN 1414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPL_FLOAT_finish 1415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPL_FLOAT_finish 1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_finish: 1419f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 1420f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1421f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_FLOAT: /* 0x2e */ 1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_FLOAT.S */ 1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1443f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1444f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPG_FLOAT_isNaN 1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPG_FLOAT_finish 1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPG_FLOAT_finish 1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_finish: 1451f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 1452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1453f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_DOUBLE: /* 0x2f */ 1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPL_DOUBLE.S */ 1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1475f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPL_DOUBLE_isNaN 1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPL_DOUBLE_finish 1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPL_DOUBLE_finish 1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_finish: 1483f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 1484f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1485f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_DOUBLE: /* 0x30 */ 1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1506f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1507f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPG_DOUBLE_isNaN 1509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPG_DOUBLE_finish 1510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPG_DOUBLE_finish 1512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_finish: 1514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 1515f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1516f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMP_LONG: /* 0x31 */ 1521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMP_LONG.S */ 1522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two 64-bit values. Puts 0, 1, or -1 into the destination 1524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * register based on the results of the comparison. 1525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* cmp-long vAA, vBB, vCC */ 1527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1528f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%edx # edx<- CC 1529f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx,1 # eax<- v[BB+1] 1530f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 0 # ecx<- v[BB+0] 1531f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl 4(rFP,%edx,4),%eax 1532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl .LOP_CMP_LONG_smaller 1533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg .LOP_CMP_LONG_bigger 1534f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sub (rFP,%edx,4),%ecx 1535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ja .LOP_CMP_LONG_bigger 1536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMP_LONG_smaller 1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMP_LONG_finish 1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQ: /* 0x32 */ 1542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_EQ.S */ 1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1552f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx <- A+ 1553f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 1554f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %ecx # eax <- vA 1555f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1556f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl (rFP,rINST,4),%eax # compare (vA, vB) 1557f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # Get signed branch offset 1558f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume not taken 1559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 1560f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1562f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1564f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1565f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NE: /* 0x33 */ 1572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_NE.S */ 1573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1582f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx <- A+ 1583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 1584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %ecx # eax <- vA 1585f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1586f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl (rFP,rINST,4),%eax # compare (vA, vB) 1587f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # Get signed branch offset 1588f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume not taken 1589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 1590f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1592f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1594f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1595f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LT: /* 0x34 */ 1602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LT.S */ 1603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1612f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx <- A+ 1613f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 1614f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %ecx # eax <- vA 1615f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1616f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl (rFP,rINST,4),%eax # compare (vA, vB) 1617f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # Get signed branch offset 1618f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume not taken 1619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jge 1f 1620f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1622f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1624f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1625f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GE: /* 0x35 */ 1632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GE.S */ 1633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1642f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx <- A+ 1643f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 1644f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %ecx # eax <- vA 1645f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1646f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl (rFP,rINST,4),%eax # compare (vA, vB) 1647f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # Get signed branch offset 1648f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume not taken 1649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl 1f 1650f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1652f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1654f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1655f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GT: /* 0x36 */ 1662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GT.S */ 1663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1672f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx <- A+ 1673f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 1674f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %ecx # eax <- vA 1675f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1676f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl (rFP,rINST,4),%eax # compare (vA, vB) 1677f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # Get signed branch offset 1678f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume not taken 1679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle 1f 1680f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1682f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1684f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1685f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LE: /* 0x37 */ 1692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LE.S */ 1693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1702f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx <- A+ 1703f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 1704f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %ecx # eax <- vA 1705f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1706f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl (rFP,rINST,4),%eax # compare (vA, vB) 1707f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # Get signed branch offset 1708f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume not taken 1709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg 1f 1710f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1712f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1714f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1715f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQZ: /* 0x38 */ 1722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_EQZ.S */ 1723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1732f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,(rFP,rINST,4) # compare (vA, 0) 1733f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # fetch signed displacement 1734f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume branch not taken 1735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 1736f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1738f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1740f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1741f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NEZ: /* 0x39 */ 1748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_NEZ.S */ 1749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1758f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,(rFP,rINST,4) # compare (vA, 0) 1759f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # fetch signed displacement 1760f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume branch not taken 1761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 1762f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1764f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1766f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1767f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LTZ: /* 0x3a */ 1774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LTZ.S */ 1775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1784f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,(rFP,rINST,4) # compare (vA, 0) 1785f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # fetch signed displacement 1786f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume branch not taken 1787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jge 1f 1788f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1790f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1792f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1793f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GEZ: /* 0x3b */ 1800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GEZ.S */ 1801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1810f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,(rFP,rINST,4) # compare (vA, 0) 1811f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # fetch signed displacement 1812f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume branch not taken 1813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl 1f 1814f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1816f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1818f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1819f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GTZ: /* 0x3c */ 1826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GTZ.S */ 1827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1836f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,(rFP,rINST,4) # compare (vA, 0) 1837f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # fetch signed displacement 1838f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume branch not taken 1839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle 1f 1840f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1842f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1844f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1845f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LEZ: /* 0x3d */ 1852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LEZ.S */ 1853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1862f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,(rFP,rINST,4) # compare (vA, 0) 1863f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # fetch signed displacement 1864f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume branch not taken 1865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg 1f 1866f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1868f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1870f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1871f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3E: /* 0x3e */ 1878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_3E.S */ 1879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3F: /* 0x3f */ 1886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_3F.S */ 1887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_40: /* 0x40 */ 1894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_40.S */ 1895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_41: /* 0x41 */ 1902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_41.S */ 1903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_42: /* 0x42 */ 1910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_42.S */ 1911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_43: /* 0x43 */ 1918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_43.S */ 1919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET: /* 0x44 */ 1926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1935f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 1936f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 1937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 19403e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects 19413e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 19423e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 1943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_contents(%eax,%ecx,4),%eax 1944f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_finish: 1945f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1946f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 1947f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1948f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_WIDE: /* 0x45 */ 1953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_WIDE.S */ 1954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 64 bits. vAA <- vBB[vCC]. 1956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1961f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 1962f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 1963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_AGET_WIDE_finish # index < length, OK 19673e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jmp common_errArrayIndex # index >= length, bail. Expects 19683e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 19693e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 1970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_OBJECT: /* 0x46 */ 1974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_OBJECT.S */ 1975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1984f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 1985f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 1986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 19893e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects 19903e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 19913e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 1992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_contents(%eax,%ecx,4),%eax 1993f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_OBJECT_finish: 1994f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1995f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 1996f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1997f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BOOLEAN: /* 0x47 */ 2003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_BOOLEAN.S */ 2004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 2005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2013f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2014f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 20183e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects 20193e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 20203e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl offArrayObject_contents(%eax,%ecx,1),%eax 2022f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_BOOLEAN_finish: 2023f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2024f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2025f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2026f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BYTE: /* 0x48 */ 2032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_BYTE.S */ 2033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 2034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2042f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2043f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 20473e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects 20483e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 20493e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl offArrayObject_contents(%eax,%ecx,1),%eax 2051f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_BYTE_finish: 2052f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2053f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2054f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2055f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_CHAR: /* 0x49 */ 2061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_CHAR.S */ 2062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 2063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2071f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2072f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 20763e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects 20773e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 20783e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offArrayObject_contents(%eax,%ecx,2),%eax 2080f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_CHAR_finish: 2081f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2082f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2083f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2084f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_SHORT: /* 0x4a */ 2090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_SHORT.S */ 2091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 2092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2100f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2101f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 21053e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects 21063e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 21073e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl offArrayObject_contents(%eax,%ecx,2),%eax 2109f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_SHORT_finish: 2110f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2111f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2112f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2113f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT: /* 0x4b */ 2119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 2120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 2122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 2124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2128f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2129f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 21333e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects: 21343e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 21353e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,4),%eax 2137f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_finish: 2138f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2139f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,(%eax) 2141f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2142f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_WIDE: /* 0x4c */ 2147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_WIDE.S */ 2148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 64 bits. vBB[vCC]<-vAA. 2150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2155f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2156f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 2160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_APUT_WIDE_finish # index < length, OK 21613e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jmp common_errArrayIndex # index >= length, bail. Expects: 21623e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 21633e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_OBJECT: /* 0x4d */ 2168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_OBJECT.S */ 2169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 2171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 2173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2177f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2178f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2179f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- vAA 2180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 2183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_APUT_OBJECT_continue 21843e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jmp common_errArrayIndex # index >= length, bail. Expects 21853e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 21863e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BOOLEAN: /* 0x4e */ 2191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_BOOLEAN.S */ 2192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 2193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 2195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 2197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2201f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2202f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 22063e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects: 22073e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 22083e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,1),%eax 2210f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_BOOLEAN_finish: 2211f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2212f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb %cl,(%eax) 2214f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2215f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BYTE: /* 0x4f */ 2221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_BYTE.S */ 2222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 2223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 2225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 2227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2231f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2232f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 22363e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects: 22373e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 22383e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,1),%eax 2240f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_BYTE_finish: 2241f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2242f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb %cl,(%eax) 2244f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2245f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_CHAR: /* 0x50 */ 2251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_CHAR.S */ 2252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 2253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 2255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 2257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2261f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2262f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 22663e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects: 22673e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 22683e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,2),%eax 2270f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_CHAR_finish: 2271f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2272f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %cx,(%eax) 2274f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2275f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_SHORT: /* 0x51 */ 2281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_SHORT.S */ 2282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 2283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 2285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 2287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2291f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2292f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 22963e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects: 22973e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 22983e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,2),%eax 2300f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_SHORT_finish: 2301f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2302f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %cx,(%eax) 2304f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2305f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET: /* 0x52 */ 2311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2318f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2319f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 2320f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2321f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2322f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2323f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2324f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2325f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2326f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2327f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2328f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_finish # no, already resolved 2329f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 2330f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_resolve 2332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE: /* 0x53 */ 2336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_WIDE.S */ 2337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit instance field get. 2339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2342f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2343f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 2344f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2345f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2346f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2347f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2348f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2349f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2350f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2351f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_WIDE_finish # no, already resolved 2353f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # for dvmResolveInstField 2354f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_WIDE_resolve 2356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT: /* 0x54 */ 2360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_OBJECT.S */ 2361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2368f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 2370f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2373f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2374f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2375f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2376f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2377f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2378f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_OBJECT_finish # no, already resolved 2379f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 2380f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_OBJECT_resolve 2382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BOOLEAN: /* 0x55 */ 2387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_BOOLEAN.S */ 2388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2395f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 2397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2398f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2399f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2400f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2401f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2402f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2403f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2404f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2405f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_BOOLEAN_finish # no, already resolved 2406f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 2407f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_BOOLEAN_resolve 2409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BYTE: /* 0x56 */ 2414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_BYTE.S */ 2415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2422f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2423f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 2424f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2425f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2426f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2427f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2428f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2429f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2430f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2431f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2432f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_BYTE_finish # no, already resolved 2433f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 2434f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_BYTE_resolve 2436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_CHAR: /* 0x57 */ 2441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_CHAR.S */ 2442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2449f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2450f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 2451f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2453f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2454f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2455f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2456f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2457f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2458f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2459f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_CHAR_finish # no, already resolved 2460f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 2461f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_CHAR_resolve 2463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_SHORT: /* 0x58 */ 2468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_SHORT.S */ 2469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 2478f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2479f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2480f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2481f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2482f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2483f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2484f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2485f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2486f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_SHORT_finish # no, already resolved 2487f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 2488f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_SHORT_resolve 2490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT: /* 0x59 */ 2495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2503f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2504f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # %edx<- 0000CCCC 2505f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2506f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2507f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2508f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2509f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2510f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2511f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2512f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2513f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_finish # no, already resolved 2514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 2515f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_resolve 2517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE: /* 0x5a */ 2521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_WIDE.S */ 2522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit instance field put. 2524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2527f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2528f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 2529f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2530f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2531f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2532f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2533f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2534f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2535f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2536f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2537f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_WIDE_finish # no, already resolved 2538f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 2539f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_WIDE_resolve 2541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT: /* 0x5b */ 2545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_OBJECT.S */ 2546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 25473d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Object field put. 2548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 25493d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iput-object 2550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2552f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2553f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 2554f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2555f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2556f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2557f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2558f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2559f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2560f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2561f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2562f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_OBJECT_finish # no, already resolved 2563f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 2564f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_OBJECT_resolve 2566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BOOLEAN: /* 0x5c */ 2570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_BOOLEAN.S */ 2571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2579f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2580f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # %edx<- 0000CCCC 2581f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2582f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2585f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2586f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2587f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2588f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2589f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_BOOLEAN_finish # no, already resolved 2590f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 2591f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_BOOLEAN_resolve 2593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BYTE: /* 0x5d */ 2598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_BYTE.S */ 2599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2607f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2608f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # %edx<- 0000CCCC 2609f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2610f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2611f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2612f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2613f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2614f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2615f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2616f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2617f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_BYTE_finish # no, already resolved 2618f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 2619f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_BYTE_resolve 2621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_CHAR: /* 0x5e */ 2626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_CHAR.S */ 2627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2635f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2636f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # %edx<- 0000CCCC 2637f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2638f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2639f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2640f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2641f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2642f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2643f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2644f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2645f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_CHAR_finish # no, already resolved 2646f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 2647f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_CHAR_resolve 2649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_SHORT: /* 0x5f */ 2654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_SHORT.S */ 2655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 2663f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2664f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # %edx<- 0000CCCC 2665f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 2666f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2667f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2668f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2669f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2670f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2671f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2672f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2673f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_SHORT_finish # no, already resolved 2674f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 2675f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 2676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_SHORT_resolve 2677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET: /* 0x60 */ 2682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2689f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_resolve # if not, make it so 2696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_finish: # field ptr in eax 2697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2698f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2699f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2700f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2701f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_WIDE: /* 0x61 */ 2706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_WIDE.S */ 2707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit SGET handler. 2709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* sget-wide vAA, field@BBBB */ 2712f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_WIDE_resolve # if not, make it so 2719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_finish: # field ptr in eax 2720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%ecx # ecx<- lsw 2721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4+offStaticField_value(%eax),%eax # eax<- msw 2722f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2723f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2724f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx rINST 0 2725f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 2726f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_OBJECT: /* 0x62 */ 2731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_OBJECT.S */ 2732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2739f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_OBJECT_resolve # if not, make it so 2746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_finish: # field ptr in eax 2747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2748f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2749f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2750f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2751f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BOOLEAN: /* 0x63 */ 2757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_BOOLEAN.S */ 2758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2765f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_BOOLEAN_resolve # if not, make it so 2772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_finish: # field ptr in eax 2773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2774f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2775f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2776f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2777f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BYTE: /* 0x64 */ 2783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_BYTE.S */ 2784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2791f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_BYTE_resolve # if not, make it so 2798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_finish: # field ptr in eax 2799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2800f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2801f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2802f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2803f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_CHAR: /* 0x65 */ 2809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_CHAR.S */ 2810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2817f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_CHAR_resolve # if not, make it so 2824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_finish: # field ptr in eax 2825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2826f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2827f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2828f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2829f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_SHORT: /* 0x66 */ 2835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_SHORT.S */ 2836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2843f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_SHORT_resolve # if not, make it so 2850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_finish: # field ptr in eax 2851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2852f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2853f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2854f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2855f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT: /* 0x67 */ 2861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 28653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 2866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2868f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_resolve # if not, make it so 2875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_finish: # field ptr in eax 2876f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2877f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2878f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2880f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_WIDE: /* 0x68 */ 2885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_WIDE.S */ 2886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2892f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_WIDE_resolve # if not, make it so 2899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_WIDE_finish: # field ptr in eax 2900f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx rINST 0 # rINST<- lsw 2901f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST rINST 1 # ecx<- msw 2902f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2903f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2904f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %ecx,offStaticField_value(%eax) 2905f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,4+offStaticField_value(%eax) 2906f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_OBJECT: /* 0x69 */ 2911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_OBJECT.S */ 2912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 29133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * SPUT object handler. 2914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2916f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 29203d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField 2921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_OBJECT_resolve # if not, make it so 2923d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee.LOP_SPUT_OBJECT_finish: # field ptr in eax 2924f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- AA 2925f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 29263d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_SPUT_OBJECT_continue 2927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BOOLEAN: /* 0x6a */ 2931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_BOOLEAN.S */ 2932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 29363d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 2937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2939f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_BOOLEAN_resolve # if not, make it so 2946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_finish: # field ptr in eax 2947f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2948f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2949f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2951f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BYTE: /* 0x6b */ 2957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_BYTE.S */ 2958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 29623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 2963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2965f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_BYTE_resolve # if not, make it so 2972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_finish: # field ptr in eax 2973f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2974f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2975f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2977f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_CHAR: /* 0x6c */ 2983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_CHAR.S */ 2984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 29883d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 2989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 2991f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 2992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 2993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_CHAR_resolve # if not, make it so 2998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_finish: # field ptr in eax 2999f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 3000f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 3001f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 3002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 3003f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_SHORT: /* 0x6d */ 3009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_SHORT.S */ 3010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 3011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 3013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 30143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 3015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 3017f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 3018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 3019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 3020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 3021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 3022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 3023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_SHORT_resolve # if not, make it so 3024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_finish: # field ptr in eax 3025f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 3026f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 3027f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 3028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 3029f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL: /* 0x6e */ 3035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */ 3036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 3039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 3041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3044f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 3045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 3046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 3047f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%eax),%eax # eax<- pDvmDex->pResMethods 3049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved baseMethod 3050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 3051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_continue # yes, continue 3052f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 3053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 3054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 3055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_VIRTUAL_more 3056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER: /* 0x6f */ 3060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */ 3061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 3063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 3065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3068f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,rINST 3069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3070f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(rINST),%ecx # ecx<- pDvmDex 3071f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved baseMethod 3074f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(rINST),%eax # eax<- method 3075f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 4(rPC),rINST # rINST<- GFED or CCCC 3076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3077f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl $0xf,rINST # rINST<- D (or stays CCCC) 3078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3079f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- "this" ptr 3080f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST # null "this"? 3081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, throw 3082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 3083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 3084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_continue # yes - go on 3085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_SUPER_resolve 3086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT: /* 0x70 */ 3090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */ 3091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 3093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 3095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 3096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 3097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 3098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/range 3100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3103f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 3104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 3106f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3108f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 4(rPC),%edx # edx<- GFED or CCCC 3109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 3110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3111f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl $0xf,%edx # edx<- D (or stays CCCC) 3112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 3114f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %edx # ecx<- "this" ptr 3115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INVOKE_DIRECT_resolve # not resolved, do it now 3116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_finish: 3117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null "this"? 3118c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange # no, continue on 3119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 3120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC: /* 0x71 */ 3124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */ 3125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 3127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 3129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3132f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 3133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 3135f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 3138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 3139c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange 3140f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 3141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 3142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 3143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 3144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 3146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_STATIC_continue 3147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE: /* 0x72 */ 3151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */ 3152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 3154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 3156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 3160f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 3161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 3163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3164f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- "this" 3165f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null this? 3167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, fail 3168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax# eax<- thisPtr->clazz 3169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- class 3170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- methodClassDex 3171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- method 3172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) # arg3<- dex 3173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG2(%esp) # arg2<- method 3175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_INTERFACE_continue 3177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_73: /* 0x73 */ 3181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_73.S */ 3182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 3183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 3184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_RANGE: /* 0x74 */ 3189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_RANGE.S */ 3190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */ 3191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 3194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 3196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3199f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 3200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 3201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%eax),%eax # eax<- pDvmDex 3202f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%eax),%eax # eax<- pDvmDex->pResMethods 3204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved baseMethod 3205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 3206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_RANGE_continue # yes, continue 3207f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 3208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 3209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 3210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_VIRTUAL_RANGE_more 3211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_RANGE: /* 0x75 */ 3216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_RANGE.S */ 3217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */ 3218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 3220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 3222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3225f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,rINST 3226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3227f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(rINST),%ecx # ecx<- pDvmDex 3228f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved baseMethod 3231f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(rINST),%eax # eax<- method 3232f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 4(rPC),rINST # rINST<- GFED or CCCC 3233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3234f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl $0xf,rINST # rINST<- D (or stays CCCC) 3235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3236f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- "this" ptr 3237f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST # null "this"? 3238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, throw 3239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 3240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 3241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_RANGE_continue # yes - go on 3242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_SUPER_RANGE_resolve 3243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_RANGE: /* 0x76 */ 3248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT_RANGE.S */ 3249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */ 3250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 3252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 3254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 3255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 3256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 3257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/range 3259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3262f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 3263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 3265f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3267f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 4(rPC),%edx # edx<- GFED or CCCC 3268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 3269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3270f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl $0xf,%edx # edx<- D (or stays CCCC) 3271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 3273f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %edx # ecx<- "this" ptr 3274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INVOKE_DIRECT_RANGE_resolve # not resolved, do it now 3275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_finish: 3276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null "this"? 3277c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange # no, continue on 3278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 3279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC_RANGE: /* 0x77 */ 3284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC_RANGE.S */ 3285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */ 3286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 3288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 3290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3293f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 3294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 3296f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 3299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 3300c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange 3301f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 3302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 3303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 3304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 3305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 3307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_STATIC_RANGE_continue 3308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE_RANGE: /* 0x78 */ 3313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE_RANGE.S */ 3314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */ 3315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 3317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 3319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 3323f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 3324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 3326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3327f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- "this" 3328f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null this? 3330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, fail 3331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax# eax<- thisPtr->clazz 3332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- class 3333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_methodClassDex(%ecx),%eax # eax<- methodClassDex 3334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- method 3335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) # arg3<- dex 3336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG2(%esp) # arg2<- method 3338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_INTERFACE_RANGE_continue 3340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_79: /* 0x79 */ 3345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_79.S */ 3346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 3347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 3348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_7A: /* 0x7a */ 3353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_7A.S */ 3354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 3355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 3356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_INT: /* 0x7b */ 3361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_INT.S */ 3362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3368f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3370f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 3371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3373f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 33747365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 33757365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %eax 3377f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 3378f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_INT: /* 0x7c */ 3384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOT_INT.S */ 3385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3391f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3392f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3393f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 3394f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3395f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 33977365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 33987365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %eax 3400f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 3401f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_LONG: /* 0x7d */ 3407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_LONG.S */ 3408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3409f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 3410f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 3411f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 3412f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx 0 # eax<- v[B+0] 3413f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # ecx<- v[B+1] 3414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %eax 3415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $0,%ecx 3416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %ecx 3417f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3418f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[A+0]<- eax 3419f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx rINST 1 # v[A+1]<- ecx 3420f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 3421f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_LONG: /* 0x7e */ 3426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOT_LONG.S */ 3427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3428f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 3429f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 3430f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 3431f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx 0 # eax<- v[B+0] 3432f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # ecx<- v[B+1] 3433f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %eax 3435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %ecx 3436f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[A+0]<- eax 3437f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx rINST 1 # v[A+1]<- ecx 3438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 3439f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_FLOAT: /* 0x7f */ 3444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_FLOAT.S */ 3445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3450f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3451f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # %st0<- vB 3453f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3454f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3455f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 3456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fchs 3457f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # vA<- %st0 3458f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_DOUBLE: /* 0x80 */ 3464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_DOUBLE.S */ 3465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3470f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3472f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # %st0<- vB 3473f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3474f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3475f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 3476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fchs 3477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # vA<- %st0 3478f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_LONG: /* 0x81 */ 3484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_LONG.S */ 3485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* int to long vA, vB */ 3486f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- +A 3487f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%eax # eax<- B 3488f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 3489f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 3490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # edx:eax<- sssssssBBBBBBBB 3491f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # v[A+1]<- edx/rPC 3492f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3493f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[A+0]<- %eax 3494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 3495f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_FLOAT: /* 0x82 */ 3500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_FLOAT.S */ 3501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3506f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3507f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3508f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fildl (rFP,rINST,4) # %st0<- vB 3509f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3510f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3511f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 35127365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3513f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # vA<- %st0 3514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_DOUBLE: /* 0x83 */ 3520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_DOUBLE.S */ 3521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3526f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3527f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3528f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fildl (rFP,rINST,4) # %st0<- vB 3529f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3530f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3531f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 35327365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3533f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # vA<- %st0 3534f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_INT: /* 0x84 */ 3540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_INT.S */ 3541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* we ignore the high word, making this equivalent to a 32-bit reg move */ 3542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 3543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 3544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 3545f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- BA 3546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 3547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shrl $4,rINST # rINST<- B 3548f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 3549f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3550f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 3551f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax # fp[A]<-fp[B] 3552f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_FLOAT: /* 0x85 */ 3558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_FLOAT.S */ 3559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3564f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3565f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3566f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fildll (rFP,rINST,4) # %st0<- vB 3567f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3568f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3569f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 35707365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3571f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # vA<- %st0 3572f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 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_LONG_TO_DOUBLE: /* 0x86 */ 3578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_DOUBLE.S */ 3579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3585f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3586f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fildll (rFP,rINST,4) # %st0<- vB 3587f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3588f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3589f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 35907365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3591f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # vA<- %st0 3592f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_INT: /* 0x87 */ 3598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_INT.S */ 3599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3608f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3609f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3611f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # %st0<- vB 3612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3613f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # %st0<- vB 3614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3620f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3621f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_INT_continue 3630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_LONG: /* 0x88 */ 3635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_LONG.S */ 3636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3645f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3646f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3648f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # %st0<- vB 3649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3650f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # %st0<- vB 3651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3657f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3658f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_continue 3667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_DOUBLE: /* 0x89 */ 3672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_DOUBLE.S */ 3673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3678f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3679f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3680f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # %st0<- vB 3681f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3682f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3683f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 36847365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3685f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # vA<- %st0 3686f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_INT: /* 0x8a */ 3692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_INT.S */ 3693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3702f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3703f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3705f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # %st0<- vB 3706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3707f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # %st0<- vB 3708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3714f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3715f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_continue 3724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_LONG: /* 0x8b */ 3729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_LONG.S */ 3730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3739f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3740f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3742f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # %st0<- vB 3743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3744f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # %st0<- vB 3745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3751f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3752f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_continue 3761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_FLOAT: /* 0x8c */ 3766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_FLOAT.S */ 3767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3772f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3773f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3774f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # %st0<- vB 3775f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3776f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3777f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 37787365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3779f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # vA<- %st0 3780f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_BYTE: /* 0x8d */ 3786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_BYTE.S */ 3787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3793f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3795f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 3796f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3797f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3798f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 37997365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 38007365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl %al,%eax 3802f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 3803f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_CHAR: /* 0x8e */ 3809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_CHAR.S */ 3810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3816f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3817f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3818f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 3819f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3820f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3821f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 38227365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 38237365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl %ax,%eax 3825f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 3826f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_SHORT: /* 0x8f */ 3832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_SHORT.S */ 3833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3839f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3840f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3841f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 3842f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3843f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3844f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 38457365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 38467365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl %ax,%eax 3848f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 3849f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT: /* 0x90 */ 3855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT.S */ 3856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3867f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 3868f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- CC 3869f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 3870f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3871f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 3872f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 3873f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 3874f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT: /* 0x91 */ 3880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_INT.S */ 3881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3892f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 3893f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- CC 3894f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 3895f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee subl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 3897f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 3898f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 3899f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT: /* 0x92 */ 3905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT.S */ 3906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary multiplication. 3908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul vAA, vBB, vCC */ 3910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3912f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 3913f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull (rFP,%ecx,4),%eax # trashes edx 3914f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 3915f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 3916f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 3917f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT: /* 0x93 */ 3922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT.S */ 3923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv.S */ 3924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 3927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 3928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3932f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 3933f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 3934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 3935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 3936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 3937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_continue_div 3938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 3939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_continue_div 3940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 3941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_finish_div 3942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT: /* 0x94 */ 3948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT.S */ 3949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv.S */ 3950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 3953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 3954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3958f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 3959f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 3960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 3961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 3962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 3963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_continue_div 3964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 3965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_continue_div 3966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 3967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_finish_div 3968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT: /* 0x95 */ 3974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT.S */ 3975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3986f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 3987f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- CC 3988f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 3989f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3990f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 3991f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 3992f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 3993f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT: /* 0x96 */ 3999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT.S */ 4000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 4001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 4004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 4005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 4006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 4008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 4009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4011f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 4012f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- CC 4013f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 4014f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee orl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 4015f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4016f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4017f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4018f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT: /* 0x97 */ 4024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT.S */ 4025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 4026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 4029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 4030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 4031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 4033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 4034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4036f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 4037f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- CC 4038f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 4039f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee xorl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 4040f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4041f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4042f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4043f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT: /* 0x98 */ 4049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT.S */ 4050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 4051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 4053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 4054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4058f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 4059f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: addl %ecx,%eax 4061f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4062f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4063f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4064f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT: /* 0x99 */ 4070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT.S */ 4071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 4072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 4074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 4075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4079f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 4080f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: addl %ecx,%eax 4082f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4083f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4084f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4085f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT: /* 0x9a */ 4091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT.S */ 4092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 4093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 4095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 4096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4100f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 4101f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: addl %ecx,%eax 4103f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4104f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4105f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4106f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG: /* 0x9b */ 4112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_LONG.S */ 4113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4121f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 # edx<- v[BB+0] 4122f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 # eax<- v[BB+1] 4123f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl (rFP,%ecx,4),%edx # ex: addl (rFP,%ecx,4),%edx 4124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 0 # v[AA+0] <- edx 4126f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4127f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[AA+1] <- eax 4128f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4129f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG: /* 0x9c */ 4135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_LONG.S */ 4136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4144f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 # edx<- v[BB+0] 4145f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 # eax<- v[BB+1] 4146f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee subl (rFP,%ecx,4),%edx # ex: addl (rFP,%ecx,4),%edx 4147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4148f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 0 # v[AA+0] <- edx 4149f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4150f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[AA+1] <- eax 4151f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4152f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG: /* 0x9d */ 4158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_LONG.S */ 4159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply. 4161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We could definately use more free registers for 4163f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * this code. We spill rINSTw (ebx), 4164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * giving us eax, ebc, ecx and edx as computational 4165f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * temps. On top of that, we'll spill edi (rFP) 41663b8a9072510222067b7c48fe2d59d1e58436be24buzbee * for use as the vB pointer and esi (rPC) for use 4167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as the vC pointer. Yuck. 4168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long vAA, vBB, vCC */ 4170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- B 4171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- C 41723b8a9072510222067b7c48fe2d59d1e58436be24buzbee SPILL_TMP2(%esi) # save Dalvik PC 4173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) 4174f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL(rINST) 4175f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rFP,%eax,4),%esi # esi<- &v[B] 4176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),rFP # rFP<- &v[C] 4177f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4(%esi),%ecx # ecx<- Bmsw 4178f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull (rFP),%ecx # ecx<- (Bmsw*Clsw) 4179f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4(rFP),%eax # eax<- Cmsw 4180f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull (%esi),%eax # eax<- (Cmsw*Blsw) 4181f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl %eax,%ecx # ecx<- (Bmsw*Clsw)+(Cmsw*Blsw) 4182f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (rFP),%eax # eax<- Clsw 4183f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee mull (%esi) # eax<- (Clsw*Alsw) 4184f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL(rINST) 4185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 4186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MUL_LONG_continue 4187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG: /* 0x9e */ 4191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG.S */ 4192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div vAA, vBB, vCC */ 4193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 4194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 4195f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 4196f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 4197f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG2(%esp) 4198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 4199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_check_zero 4200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 4201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_check_neg1 4202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_notSpecial: 4203f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %ecx 0 4204f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 4205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_notSpecial1: 4206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 4207f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) 4208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 4209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_continue 4210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG: /* 0x9f */ 4214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_LONG.S */ 4215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG.S */ 4216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div vAA, vBB, vCC */ 4217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 4218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 4219f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 4220f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 4221f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG2(%esp) 4222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 4223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_check_zero 4224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 4225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_check_neg1 4226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_notSpecial: 4227f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %ecx 0 4228f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 4229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_notSpecial1: 4230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 4231f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) 4232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 4233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_continue 4234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG: /* 0xa0 */ 4239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_LONG.S */ 4240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4248f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 # edx<- v[BB+0] 4249f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 # eax<- v[BB+1] 4250f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl (rFP,%ecx,4),%edx # ex: addl (rFP,%ecx,4),%edx 4251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4252f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 0 # v[AA+0] <- edx 4253f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4254f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[AA+1] <- eax 4255f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4256f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG: /* 0xa1 */ 4262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_LONG.S */ 4263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4271f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 # edx<- v[BB+0] 4272f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 # eax<- v[BB+1] 4273f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee orl (rFP,%ecx,4),%edx # ex: addl (rFP,%ecx,4),%edx 4274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4275f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 0 # v[AA+0] <- edx 4276f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4277f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[AA+1] <- eax 4278f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4279f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG: /* 0xa2 */ 4285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_LONG.S */ 4286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4294f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 # edx<- v[BB+0] 4295f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 # eax<- v[BB+1] 4296f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee xorl (rFP,%ecx,4),%edx # ex: addl (rFP,%ecx,4),%edx 4297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4298f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 0 # v[AA+0] <- edx 4299f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4300f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[AA+1] <- eax 4301f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4302f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG: /* 0xa3 */ 4308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_LONG.S */ 4309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long vAA, vBB, vCC */ 4318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4320f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* rINSTw gets AA */ 4321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4323f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 1 # ecx<- v[BB+1] 4324f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- vCC 4325f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 0 # eax<- v[BB+0] 4326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shldl %eax,%edx 4327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax 4328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edx 4331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 4332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4333f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # v[AA+1]<- %edx 4334f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHL_LONG_finish 4336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG: /* 0xa4 */ 4340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_LONG.S */ 4341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long vAA, vBB, vCC */ 4350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* rINSTw gets AA */ 4353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4355f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 1 # edx<- v[BB+1] 4356f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- vCC 4357f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 0 # eax<- v[BB+0] 4358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%edx 4360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $31,%edx 4364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4365f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # v[AA+1]<- edx 4366f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHR_LONG_finish 4368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG: /* 0xa5 */ 4372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_LONG.S */ 4373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long vAA, vBB, vCC */ 4382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4384f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* rINSTw gets AA */ 4385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4387f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 1 # edx<- v[BB+1] 4388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- vCC 4389f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 0 # eax<- v[BB+0] 4390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%edx 4392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %edx,%edx 4396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4397b703ba2fbbf626a087903b5ee890989d18fd0c2bbuzbee SET_VREG_WORD %edx rINST 1 # v[AA+1]<- edx 4398f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_USHR_LONG_finish 4400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT: /* 0xa6 */ 4404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_FLOAT.S */ 4405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4412f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4413f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4414f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%eax,4) # vCC to fp stack 4415f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fadds (rFP,%ecx,4) # ex: faddp 4416f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4417f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4418f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,rINST,4) # %st to vAA 4419f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT: /* 0xa7 */ 4425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_FLOAT.S */ 4426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4433f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4434f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4435f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%eax,4) # vCC to fp stack 4436f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fsubs (rFP,%ecx,4) # ex: faddp 4437f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4439f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,rINST,4) # %st to vAA 4440f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT: /* 0xa8 */ 4446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_FLOAT.S */ 4447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4454f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4455f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4456f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%eax,4) # vCC to fp stack 4457f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fmuls (rFP,%ecx,4) # ex: faddp 4458f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4459f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4460f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,rINST,4) # %st to vAA 4461f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT: /* 0xa9 */ 4467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_FLOAT.S */ 4468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4475f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%eax,4) # vCC to fp stack 4478f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fdivs (rFP,%ecx,4) # ex: faddp 4479f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4480f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4481f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,rINST,4) # %st to vAA 4482f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT: /* 0xaa */ 4488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_FLOAT.S */ 4489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float vAA, vBB, vCC */ 4490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vCC to fp stack 4493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- AA 4495f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 4497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 4498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 4499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 4500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 4501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 4502f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4504f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE: /* 0xab */ 4509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_DOUBLE.S */ 4510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4517f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4518f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4519f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%eax,4) # vCC to fp stack 4520f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee faddl (rFP,%ecx,4) # ex: faddp 4521f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4522f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4523f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,rINST,4) # %st to vAA 4524f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE: /* 0xac */ 4530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_DOUBLE.S */ 4531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4538f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4539f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4540f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%eax,4) # vCC to fp stack 4541f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fsubl (rFP,%ecx,4) # ex: faddp 4542f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4543f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4544f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,rINST,4) # %st to vAA 4545f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE: /* 0xad */ 4551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_DOUBLE.S */ 4552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4559f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4560f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4561f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%eax,4) # vCC to fp stack 4562f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fmull (rFP,%ecx,4) # ex: faddp 4563f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4564f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4565f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,rINST,4) # %st to vAA 4566f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE: /* 0xae */ 4572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_DOUBLE.S */ 4573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4580f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4581f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4582f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%eax,4) # vCC to fp stack 4583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fdivl (rFP,%ecx,4) # ex: faddp 4584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4585f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4586f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,rINST,4) # %st to vAA 4587f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE: /* 0xaf */ 4593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_DOUBLE.S */ 4594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float vAA, vBB, vCC */ 4595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vCC to fp stack 4598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4599f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- AA 4600f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 4602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 4603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 4604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 4605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 4606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 4607f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4609f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_2ADDR: /* 0xb0 */ 4614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_2ADDR.S */ 4615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4631f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 4632f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4633f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 4634f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4635f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 4636f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4637f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4638f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT_2ADDR: /* 0xb1 */ 4644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_INT_2ADDR.S */ 4645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4661f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 4662f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4663f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 4664f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4665f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 4666f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee subl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4667f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4668f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 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_MUL_INT_2ADDR: /* 0xb2 */ 4674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_2ADDR.S */ 4675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul vA, vB */ 4676f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 4677f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4678f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 4679f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 4680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP,%ecx,4),%eax 4681f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4682f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 4683f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4684f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_2ADDR: /* 0xb3 */ 4689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_2ADDR.S */ 4690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv2addr.S */ 4691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 4693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 4694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/2addr vA, vB */ 4696f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # eax<- BA 4697f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 4698f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4699f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 4700f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vBB 4701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 4702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 4703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 4704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_2ADDR_continue_div2addr 4705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 4706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_2ADDR_continue_div2addr 4707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 4708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_2ADDR_finish_div2addr 4709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_2ADDR: /* 0xb4 */ 4715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_2ADDR.S */ 4716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv2addr.S */ 4717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 4719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 4720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/2addr vA, vB */ 4722f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # eax<- BA 4723f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 4724f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4725f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 4726f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vBB 4727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 4728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 4729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 4730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_2ADDR_continue_div2addr 4731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 4732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_2ADDR_continue_div2addr 4733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 4734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_2ADDR_finish_div2addr 4735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_2ADDR: /* 0xb5 */ 4741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_2ADDR.S */ 4742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4758f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 4759f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4760f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 4761f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4762f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 4763f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4764f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4765f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_2ADDR: /* 0xb6 */ 4771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_2ADDR.S */ 4772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4788f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 4789f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4790f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 4791f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4792f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 4793f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee orl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4795f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_2ADDR: /* 0xb7 */ 4801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_2ADDR.S */ 4802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4818f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 4819f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4820f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 4821f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4822f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 4823f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee xorl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4824f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4825f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_2ADDR: /* 0xb8 */ 4831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT_2ADDR.S */ 4832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4837f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # eax<- BA 4838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4839f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4840f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 4841f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 4842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: sarl %cl,%eax 4843f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4844f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4845f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4846f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_2ADDR: /* 0xb9 */ 4852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT_2ADDR.S */ 4853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4858f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # eax<- BA 4859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4860f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4861f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 4862f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 4863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: sarl %cl,%eax 4864f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4865f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4866f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4867f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_2ADDR: /* 0xba */ 4873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT_2ADDR.S */ 4874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4879f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # eax<- BA 4880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4881f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4882f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 4883f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 4884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: sarl %cl,%eax 4885f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4886f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4887f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4888f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG_2ADDR: /* 0xbb */ 4894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_LONG_2ADDR.S */ 4895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4900f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 4901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4902f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx 0 # eax<- v[B+0] 4903f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # eax<- v[B+1] 4904f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xF,rINSTbl # rINST<- A 4905f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl %eax,(rFP,rINST,4) # example: addl %eax,(rFP,rINST,4) 4906f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee adcl %ecx,4(rFP,rINST,4) # example: adcl %ecx,4(rFP,rINST,4) 4907f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4908f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4909f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG_2ADDR: /* 0xbc */ 4915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_LONG_2ADDR.S */ 4916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4921f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 4922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4923f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx 0 # eax<- v[B+0] 4924f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # eax<- v[B+1] 4925f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xF,rINSTbl # rINST<- A 4926f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee subl %eax,(rFP,rINST,4) # example: addl %eax,(rFP,rINST,4) 4927f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sbbl %ecx,4(rFP,rINST,4) # example: adcl %ecx,4(rFP,rINST,4) 4928f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4929f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4930f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG_2ADDR: /* 0xbd */ 4936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_LONG_2ADDR.S */ 4937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply, 2-addr version 4939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We could definately use more free registers for 4941f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * this code. We must spill %edx (edx) because it 4942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is used by imul. We'll also spill rINST (ebx), 4943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * giving us eax, ebc, ecx and edx as computational 4944f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * temps. On top of that, we'll spill %esi (edi) 4945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for use as the vA pointer and rFP (esi) for use 4946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as the vB pointer. Yuck. 4947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long/2addr vA, vB */ 4949f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- BA 4950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 4951f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4952f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP2(%esi) 4953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) 4954f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rFP,%eax,4),%esi # %esi<- &v[A] 4955f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rFP,rINST,4),rFP # rFP<- &v[B] 4956f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4(%esi),%ecx # ecx<- Amsw 4957f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull (rFP),%ecx # ecx<- (Amsw*Blsw) 4958f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4(rFP),%eax # eax<- Bmsw 4959f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull (%esi),%eax # eax<- (Bmsw*Alsw) 4960f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl %eax,%ecx # ecx<- (Amsw*Blsw)+(Bmsw*Alsw) 4961f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (rFP),%eax # eax<- Blsw 4962f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee mull (%esi) # eax<- (Blsw*Alsw) 4963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MUL_LONG_2ADDR_continue 4964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG_2ADDR: /* 0xbe */ 4968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */ 4969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/2addr vA, vB */ 4970f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax 4971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,%eax # eax<- B 4972f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 4973f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 4974f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 4975f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG2(%esp) 4976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 4977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_2ADDR_check_zero 4978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 4979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_2ADDR_check_neg1 4980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial: 4981f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx rINST 0 4982f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx rINST 1 4983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial1: 4984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_2ADDR_continue 4985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG_2ADDR: /* 0xbf */ 4989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_LONG_2ADDR.S */ 4990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */ 4991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/2addr vA, vB */ 4992f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax 4993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,%eax # eax<- B 4994f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 4995f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 4996f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 4997f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG2(%esp) 4998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 4999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_2ADDR_check_zero 5000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 5001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_2ADDR_check_neg1 5002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial: 5003f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx rINST 0 5004f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx rINST 1 5005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial1: 5006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_2ADDR_continue 5007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG_2ADDR: /* 0xc0 */ 5012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_LONG_2ADDR.S */ 5013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 5014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 5016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5018f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5020f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx 0 # eax<- v[B+0] 5021f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # eax<- v[B+1] 5022f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xF,rINSTbl # rINST<- A 5023f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %eax,(rFP,rINST,4) # example: addl %eax,(rFP,rINST,4) 5024f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %ecx,4(rFP,rINST,4) # example: adcl %ecx,4(rFP,rINST,4) 5025f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5026f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5027f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG_2ADDR: /* 0xc1 */ 5033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_LONG_2ADDR.S */ 5034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 5035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 5037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5039f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5041f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx 0 # eax<- v[B+0] 5042f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # eax<- v[B+1] 5043f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xF,rINSTbl # rINST<- A 5044f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee orl %eax,(rFP,rINST,4) # example: addl %eax,(rFP,rINST,4) 5045f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee orl %ecx,4(rFP,rINST,4) # example: adcl %ecx,4(rFP,rINST,4) 5046f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5047f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5048f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG_2ADDR: /* 0xc2 */ 5054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_LONG_2ADDR.S */ 5055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 5056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 5058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5060f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5062f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx 0 # eax<- v[B+0] 5063f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # eax<- v[B+1] 5064f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xF,rINSTbl # rINST<- A 5065f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee xorl %eax,(rFP,rINST,4) # example: addl %eax,(rFP,rINST,4) 5066f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee xorl %ecx,4(rFP,rINST,4) # example: adcl %ecx,4(rFP,rINST,4) 5067f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5068f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5069f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG_2ADDR: /* 0xc3 */ 5075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_LONG_2ADDR.S */ 5076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 5078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 5079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 5081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 5082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 5083f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* rINSTw gets AA */ 5084f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5085f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5086f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax rINST 0 # eax<- v[AA+0] 5087f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 5088f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx rINST 1 # edx<- v[AA+1] 5089f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- vBB 5090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shldl %eax,%edx 5091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax 5092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 5093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 5094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edx 5095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 5096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 5097f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # v[AA+1]<- edx 5098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHL_LONG_2ADDR_finish 5099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG_2ADDR: /* 0xc4 */ 5103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_LONG_2ADDR.S */ 5104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 5106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 5107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 5109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 5110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 5111f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* rINSTw gets AA */ 5112f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5113f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5114f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax rINST 0 # eax<- v[AA+0] 5115f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 5116f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx rINST 1 # edx<- v[AA+1] 5117f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- vBB 5118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 5119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%edx 5120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 5121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 5122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 5123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $31,%edx 5124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 5125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # v[AA+1]<- edx 5126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHR_LONG_2ADDR_finish 5127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG_2ADDR: /* 0xc5 */ 5131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_LONG_2ADDR.S */ 5132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 5134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 5135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 5137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 5138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 5139f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* rINSTw gets AA */ 5140f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5141f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5142f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax rINST 0 # eax<- v[AA+0] 5143f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 5144f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx rINST 1 # edx<- v[AA+1] 5145f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- vBB 5146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 5147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%edx 5148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 5149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 5150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 5151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %edx,%edx 5152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 5153f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # v[AA+1]<- edx 5154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_USHR_LONG_2ADDR_finish 5155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT_2ADDR: /* 0xc6 */ 5159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_FLOAT_2ADDR.S */ 5160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5168f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5169f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5170f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%ecx,4) # vAA to fp stack 5171f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5172f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fadds (rFP,rINST,4) # ex: faddp 5173f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5174f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5175f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # %st to vA 5176f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT_2ADDR: /* 0xc7 */ 5182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_FLOAT_2ADDR.S */ 5183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5191f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5192f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5193f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%ecx,4) # vAA to fp stack 5194f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5195f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fsubs (rFP,rINST,4) # ex: faddp 5196f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5197f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5198f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # %st to vA 5199f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT_2ADDR: /* 0xc8 */ 5205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_FLOAT_2ADDR.S */ 5206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5214f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5215f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5216f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%ecx,4) # vAA to fp stack 5217f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5218f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fmuls (rFP,rINST,4) # ex: faddp 5219f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5220f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5221f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # %st to vA 5222f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT_2ADDR: /* 0xc9 */ 5228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_FLOAT_2ADDR.S */ 5229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5237f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5238f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5239f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%ecx,4) # vAA to fp stack 5240f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5241f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fdivs (rFP,rINST,4) # ex: faddp 5242f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5243f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5244f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # %st to vA 5245f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT_2ADDR: /* 0xca */ 5251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_FLOAT_2ADDR.S */ 5252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float/2addr vA, vB */ 5253f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5254f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5255f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # vBB to fp stack 5256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 5258f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 5260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 5261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 5262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 5263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 5264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 5265f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 5267f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE_2ADDR: /* 0xcb */ 5272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_DOUBLE_2ADDR.S */ 5273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5281f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5282f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5283f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%ecx,4) # vAA to fp stack 5284f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5285f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee faddl (rFP,rINST,4) # ex: faddp 5286f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5287f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5288f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # %st to vA 5289f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE_2ADDR: /* 0xcc */ 5295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_DOUBLE_2ADDR.S */ 5296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5304f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5305f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5306f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%ecx,4) # vAA to fp stack 5307f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5308f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fsubl (rFP,rINST,4) # ex: faddp 5309f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5310f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # %st to vA 5312f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 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_MUL_DOUBLE_2ADDR: /* 0xcd */ 5318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_DOUBLE_2ADDR.S */ 5319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5327f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5328f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5329f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%ecx,4) # vAA to fp stack 5330f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5331f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fmull (rFP,rINST,4) # ex: faddp 5332f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5333f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5334f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # %st to vA 5335f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE_2ADDR: /* 0xce */ 5341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_DOUBLE_2ADDR.S */ 5342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5350f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5351f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%ecx,4) # vAA to fp stack 5353f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5354f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fdivl (rFP,rINST,4) # ex: faddp 5355f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5356f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5357f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # %st to vA 5358f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE_2ADDR: /* 0xcf */ 5364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_DOUBLE_2ADDR.S */ 5365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float/2addr vA, vB */ 5366f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5367f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5368f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # vBB to fp stack 5369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 5373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 5374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 5375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 5376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 5377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 5378f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5380f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT16: /* 0xd0 */ 5385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_LIT16.S */ 5386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5399f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5401f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %ecx,%eax # for example: addl %ecx, %eax 5403f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5404f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5405f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5406f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT: /* 0xd1 */ 5412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RSUB_INT.S */ 5413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5424f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5426f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5428f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,%ecx # for example: addl %ecx, %eax 5430f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx rINST 5431f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5432f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5433f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT16: /* 0xd2 */ 5439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_LIT16.S */ 5440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul/lit16 vA, vB, #+CCCC */ 5441f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* Need A in rINST, ssssCCCC in ecx, vB in eax */ 5442f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5444f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5446f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5447f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull %ecx,%eax # trashes edx 5448f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5449f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5450f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5451f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT16: /* 0xd3 */ 5456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_LIT16.S */ 5457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit16.S */ 5458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 5460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 5461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit16 vA, vB, #+CCCC */ 5463f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* Need A in rINST, ssssCCCC in ecx, vB in eax */ 5464f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5465f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%eax # eax<- B 5466f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5467f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),%ecx # ecx<- ssssCCCC 5468f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT16_continue_div 5473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT16_continue_div 5475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 5476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_LIT16_finish_div 5477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT16: /* 0xd4 */ 5483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_LIT16.S */ 5484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit16.S */ 5485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 5487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 5488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit16 vA, vB, #+CCCC */ 5490f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* Need A in rINST, ssssCCCC in ecx, vB in eax */ 5491f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5492f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%eax # eax<- B 5493f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),%ecx # ecx<- ssssCCCC 5495f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT16_continue_div 5500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT16_continue_div 5502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 5503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_LIT16_finish_div 5504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT16: /* 0xd5 */ 5510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_LIT16.S */ 5511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5522f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5524f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5526f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %ecx,%eax # for example: addl %ecx, %eax 5528f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5529f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5530f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5531f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT16: /* 0xd6 */ 5537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_LIT16.S */ 5538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5549f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5551f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5553f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,%eax # for example: addl %ecx, %eax 5555f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5556f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5557f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5558f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT16: /* 0xd7 */ 5564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_LIT16.S */ 5565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5576f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5578f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5580f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xor %ecx,%eax # for example: addl %ecx, %eax 5582f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5585f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT8: /* 0xd8 */ 5591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_LIT8.S */ 5592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5606f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %ecx,%eax # ex: addl %ecx,%eax 5608f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5609f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5610f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5611f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT_LIT8: /* 0xd9 */ 5617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RSUB_INT_LIT8.S */ 5618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5632f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,%ecx # ex: addl %ecx,%eax 5634f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5635f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx rINST 5636f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5637f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT8: /* 0xda */ 5643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_LIT8.S */ 5644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul/lit8 vAA, vBB, #+CC */ 5645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5647f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5648f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull %ecx,%eax # trashes edx 5649f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5650f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5651f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5652f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT8: /* 0xdb */ 5657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_LIT8.S */ 5658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit8.S */ 5659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit div/rem "lit8" binary operation. Handles special case of 5661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op0=minint & op1=-1 5662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit8 vAA, vBB, #+CC */ 5664f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 5665f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movsbl 3(rPC),%ecx # ecx<- ssssssCC 5666f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT8_continue_div 5671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT8_continue_div 5673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 5674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_LIT8_finish_div 5675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT8: /* 0xdc */ 5681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_LIT8.S */ 5682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit8.S */ 5683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit div/rem "lit8" binary operation. Handles special case of 5685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op0=minint & op1=-1 5686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit8 vAA, vBB, #+CC */ 5688f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 5689f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movsbl 3(rPC),%ecx # ecx<- ssssssCC 5690f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT8_continue_div 5695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT8_continue_div 5697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 5698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_LIT8_finish_div 5699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT8: /* 0xdd */ 5705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_LIT8.S */ 5706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5720f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %ecx,%eax # ex: addl %ecx,%eax 5722f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5723f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5724f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5725f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT8: /* 0xde */ 5731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_LIT8.S */ 5732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5746f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,%eax # ex: addl %ecx,%eax 5748f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5749f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5750f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5751f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT8: /* 0xdf */ 5757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_LIT8.S */ 5758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5772f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xor %ecx,%eax # ex: addl %ecx,%eax 5774f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5775f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5776f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5777f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_LIT8: /* 0xe0 */ 5783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT_LIT8.S */ 5784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5798f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: addl %ecx,%eax 5800f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5801f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5802f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5803f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_LIT8: /* 0xe1 */ 5809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT_LIT8.S */ 5810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5824f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: addl %ecx,%eax 5826f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5827f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5828f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5829f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_LIT8: /* 0xe2 */ 5835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT_LIT8.S */ 5836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5850f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: addl %ecx,%eax 5852f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5853f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5854f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5855f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5860c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IGET_VOLATILE: /* 0xe3 */ 58613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET_VOLATILE.S */ 58623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET.S */ 58633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 58643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit instance field get. 58653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 58663d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 58673d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 58683d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vA, vB, field@CCCC */ 5869f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 5870f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 5871f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 5872f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5873f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 5874f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 5875f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5876f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 5877f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 5878f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 5879f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_VOLATILE_finish # no, already resolved 5880f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 5881f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 58823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IGET_VOLATILE_resolve 58833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 58843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5887c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IPUT_VOLATILE: /* 0xe4 */ 58883d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT_VOLATILE.S */ 58893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT.S */ 58903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 58913d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 58923d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit instance field put. 58933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 58943d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 58953d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 58963d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vA, vB, field@CCCC */ 5897f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 5898f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # %edx<- 0000CCCC 5899f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 5900f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5901f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 5902f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 5903f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5904f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 5905f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 5906f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 5907f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_VOLATILE_finish # no, already resolved 5908f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 5909f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 59103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IPUT_VOLATILE_resolve 59113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 59123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5915c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SGET_VOLATILE: /* 0xe5 */ 59163d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET_VOLATILE.S */ 59173d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET.S */ 59183d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 59193d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit SGET handler. 59203d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 59213d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 59223d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 59233d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vAA, field@BBBB */ 5924f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 59253d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 59263d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 59273d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 59283d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 59293d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # resolved entry null? 59303d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je .LOP_SGET_VOLATILE_resolve # if not, make it so 59313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SGET_VOLATILE_finish: # field ptr in eax 59323d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offStaticField_value(%eax),%eax 5933f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5934f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5935f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5936f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 59373d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 59383d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5941c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SPUT_VOLATILE: /* 0xe6 */ 59423d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT_VOLATILE.S */ 59433d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT.S */ 59443d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 59453d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit SPUT handler. 59463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 59473d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 59483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 59493d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vAA, field@BBBB */ 5950f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 59513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 59523d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 59533d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 59543d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 59553d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # resolved entry null? 59563d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je .LOP_SPUT_VOLATILE_resolve # if not, make it so 59573d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SPUT_VOLATILE_finish: # field ptr in eax 5958f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 5959f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5960f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 59613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,offStaticField_value(%eax) 5962f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 59633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 59643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5967c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IGET_OBJECT_VOLATILE: /* 0xe7 */ 59683d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET_OBJECT_VOLATILE.S */ 59693d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET.S */ 59703d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 59713d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit instance field get. 59723d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 59733d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 59743d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 59753d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vA, vB, field@CCCC */ 5976f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 5977f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 5978f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 5979f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5980f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 5981f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 5982f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5983f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 5984f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 5985f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 5986f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_OBJECT_VOLATILE_finish # no, already resolved 5987f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 5988f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 59893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IGET_OBJECT_VOLATILE_resolve 59903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 59913d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 59945387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_IGET_WIDE_VOLATILE: /* 0xe8 */ 59955387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 5996f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVE_PC_FP_TO_GLUE %ecx # leaves rGLUE in %ecx 59975387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 59985387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_IGET_WIDE_VOLATILE # do the real work 5999f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee mov rGLUE,%ecx 6000f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee LOAD_PC_FP_FROM_GLUE # retrieve updated values 6001f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 60025387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 6003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 60055387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_IPUT_WIDE_VOLATILE: /* 0xe9 */ 60065387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 6007f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVE_PC_FP_TO_GLUE %ecx # leaves rGLUE in %ecx 60085387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 60095387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_IPUT_WIDE_VOLATILE # do the real work 6010f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee mov rGLUE,%ecx 6011f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee LOAD_PC_FP_FROM_GLUE # retrieve updated values 6012f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 60135387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 6014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 60165387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_SGET_WIDE_VOLATILE: /* 0xea */ 60175387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 6018f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVE_PC_FP_TO_GLUE %ecx # leaves rGLUE in %ecx 60195387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 60205387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_SGET_WIDE_VOLATILE # do the real work 6021f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee mov rGLUE,%ecx 6022f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee LOAD_PC_FP_FROM_GLUE # retrieve updated values 6023f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 60245387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 6025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 60275387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_SPUT_WIDE_VOLATILE: /* 0xeb */ 60285387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 6029f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVE_PC_FP_TO_GLUE %ecx # leaves rGLUE in %ecx 60305387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 60315387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_SPUT_WIDE_VOLATILE # do the real work 6032f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee mov rGLUE,%ecx 6033f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee LOAD_PC_FP_FROM_GLUE # retrieve updated values 6034f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 60355387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 6036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 603896516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden.L_OP_BREAKPOINT: /* 0xec */ 603996516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden/* File: x86/OP_BREAKPOINT.S */ 6040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 6041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 6042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 60463a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden.L_OP_THROW_VERIFICATION_ERROR: /* 0xed */ 6047be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee/* File: x86/OP_THROW_VERIFICATION_ERROR.S */ 6048be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee /* 6049be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * Handle a throw-verification-error instruction. This throws an 6050be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * exception for an error discovered during verification. The 6051be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * exception is indicated by AA, with some detail provided by BBBB. 6052be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee */ 6053be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee /* op AA, ref@BBBB */ 6054f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 6055be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movzwl 2(rPC),%eax # eax<- BBBB 6056be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl offGlue_method(%ecx),%ecx # ecx<- glue->method 6057f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6058be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl %eax,OUT_ARG2(%esp) # arg2<- BBBB 6059f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,OUT_ARG1(%esp) # arg1<- AA 6060be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl %ecx,OUT_ARG0(%esp) # arg0<- method 6061be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee call dvmThrowVerificationError # call(method, kind, ref) 6062be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee jmp common_exceptionThrown # handle exception 6063be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee 6064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_EXECUTE_INLINE: /* 0xee */ 6067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_EXECUTE_INLINE.S */ 6068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Execute a "native inline" instruction. 6070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We will be calling through a function table: 6072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (*gDvmInlineOpsTable[opIndex].func)(arg0, arg1, arg2, arg3, pResult) 6074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6075f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Ignores argument count - always loads 4. 6076f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * 6077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* [opt] execute-inline vAA, {vC, vD, vE, vF}, inline@BBBB */ 6079f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 6080f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offGlue_retval(%ecx),%ecx # ecx<- & glue->retval 6083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG4(%esp) 6084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call .LOP_EXECUTE_INLINE_continue # make call; will return after 6085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # successful? 6086f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 6087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6088f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 6089f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6093b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden.L_OP_EXECUTE_INLINE_RANGE: /* 0xef */ 6094b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden /* (stub) */ 6095f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVE_PC_FP_TO_GLUE %ecx # leaves rGLUE in %ecx 6096b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 6097b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden call dvmMterp_OP_EXECUTE_INLINE_RANGE # do the real work 6098f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee mov rGLUE,%ecx 6099f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee LOAD_PC_FP_FROM_GLUE # retrieve updated values 6100f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 6101b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden GOTO_NEXT 6102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_EMPTY: /* 0xf0 */ 6105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT_EMPTY.S */ 6106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * invoke-direct-empty is a no-op in a "standard" interpreter. 6108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6109f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_WORD 3 6110f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 6111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6115291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden.L_OP_RETURN_VOID_BARRIER: /* 0xf1 */ 6116291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden /* (stub) */ 6117f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVE_PC_FP_TO_GLUE %ecx # leaves rGLUE in %ecx 6118291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden movl %ecx,OUT_ARG0(%esp) # glue is first arg to function 6119291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden call dvmMterp_OP_RETURN_VOID_BARRIER # do the real work 6120f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee mov rGLUE,%ecx 6121f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee LOAD_PC_FP_FROM_GLUE # retrieve updated values 6122f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 6123291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden GOTO_NEXT 6124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_QUICK: /* 0xf2 */ 6127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */ 6128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-quick */ 6129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6130f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 6131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6132f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # vB (object we're operating on) 6133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 6134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 6135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%eax 6137f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6138f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6139f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6140f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST # fp[A]<- result 6141f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE_QUICK: /* 0xf3 */ 6146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_WIDE_QUICK.S */ 6147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-wide-quick */ 6148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6149f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 6150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6151f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # vB (object we're operating on) 6152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 6153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 6154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of 64-bit source 6156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax),%ecx # ecx<- lsw 6157f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4(%eax),%eax # eax<- msw 6158f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6159f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6160f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx rINST 0 # v[A+0]<- lsw 6161f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[A+1]<- msw 6162f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6163f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT_QUICK: /* 0xf4 */ 6168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_OBJECT_QUICK.S */ 6169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */ 6170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-quick */ 6171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6172f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 6173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6174f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # vB (object we're operating on) 6175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 6176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 6177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%eax 6179f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6180f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6181f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6182f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST # fp[A]<- result 6183f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_QUICK: /* 0xf5 */ 6189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_QUICK.S */ 61903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* For: iput-quick */ 6191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6192f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 6193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6194f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # vB (object we're operating on) 6195f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6196f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST,rINST # rINST<- v[A] 6197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 6198f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # is object null? 6199f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6201f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,(%ecx,%eax,1) 6202f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6203f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE_QUICK: /* 0xf6 */ 6208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_WIDE_QUICK.S */ 6209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iput-wide-quick */ 6210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6211f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 6212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6213f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # vB (object we're operating on) 6214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 6215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # is object null? 6216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%ecx # ecx<- Address of 64-bit target 6218f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6219f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax rINST 0 # eax<- lsw 6220f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST rINST 1 # rINST<- msw 6221f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(%ecx) 6223f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,4(%ecx) 6224f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6225f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT_QUICK: /* 0xf7 */ 6230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_OBJECT_QUICK.S */ 62313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* For: iput-object-quick */ 6232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6233f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 6234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6235f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # vB (object we're operating on) 6236f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6237f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- v[A] 6238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 62393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %ecx,%ecx # is object null? 6240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6241f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,(%ecx,%eax,1) 6242f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 62433d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IPUT_OBJECT_QUICK_finish 6244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK: /* 0xf8 */ 6248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */ 6249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 6251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 6253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 6257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 6260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6261f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vC ("this" ptr) 6262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yep, throw exception 6264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- thisPtr->clazz 6265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable 6266f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # might throw later - get ready 6267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[BBBB] 6268c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 6269c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 6270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK_RANGE: /* 0xf9 */ 6273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK_RANGE.S */ 6274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */ 6275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 6277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 6279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 6283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 6286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6287f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vC ("this" ptr) 6288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yep, throw exception 6290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- thisPtr->clazz 6291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable 6292f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # might throw later - get ready 6293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[BBBB] 6294c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 6295c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 6296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK: /* 0xfa */ 6300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */ 6301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 6303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 6305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6308f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 6309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 6310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 6311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- D (or stays CCCC) 6313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6315f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- "this" 6316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super 6317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null "this"? 6318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # "this" is null, throw exception 6319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- vtable 6321f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- super->vtable[BBBB] 6323c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 6324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK_RANGE: /* 0xfb */ 6328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK_RANGE.S */ 6329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */ 6330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 6332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 6334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6337f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 6338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 6339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 6340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- D (or stays CCCC) 6342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6344f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- "this" 6345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super 6346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null "this"? 6347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # "this" is null, throw exception 6348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- vtable 6350f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- super->vtable[BBBB] 6352c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 6353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6357c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IPUT_OBJECT_VOLATILE: /* 0xfc */ 63583d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT_OBJECT_VOLATILE.S */ 63593d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT_OBJECT.S */ 63603d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 63613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Object field put. 63623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 63633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iput-object 63643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 63653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vA, vB, field@CCCC */ 6366f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 6367f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 6368f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_methodClassDex(%ecx),%eax # eax<- DvmDex 6369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 6370f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 6371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 6372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6373f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 6374f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 6375f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 6376f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_OBJECT_VOLATILE_finish # no, already resolved 6377f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 6378f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx 63793d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IPUT_OBJECT_VOLATILE_resolve 63803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 63813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 6382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6384c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SGET_OBJECT_VOLATILE: /* 0xfd */ 63853d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET_OBJECT_VOLATILE.S */ 63863d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET.S */ 63873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 63883d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit SGET handler. 63893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 63903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 63913d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 63923d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vAA, field@BBBB */ 6393f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 63943d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 63953d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 63963d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 63973d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 63983d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # resolved entry null? 63993d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je .LOP_SGET_OBJECT_VOLATILE_resolve # if not, make it so 64003d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SGET_OBJECT_VOLATILE_finish: # field ptr in eax 64013d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offStaticField_value(%eax),%eax 6402f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6403f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6404f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 6405f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 64063d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 64073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 6408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6410c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SPUT_OBJECT_VOLATILE: /* 0xfe */ 64113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT_OBJECT_VOLATILE.S */ 64123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT_OBJECT.S */ 64133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 64143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * SPUT object handler. 64153d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 64163d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vAA, field@BBBB */ 6417f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 64183d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 64193d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex 64203d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 64213d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField 64223d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # resolved entry null? 64233d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je .LOP_SPUT_OBJECT_VOLATILE_resolve # if not, make it so 6424d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee.LOP_SPUT_OBJECT_VOLATILE_finish: # field ptr in eax 6425f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- AA 6426f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 64273d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_SPUT_OBJECT_VOLATILE_continue 64283d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 64293d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 6430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 643290f15431b24a4004fab2db70f273155fcd1c42a4Dan Bornstein.L_OP_DISPATCH_FF: /* 0xff */ 643390f15431b24a4004fab2db70f273155fcd1c42a4Dan Bornstein/* File: x86/OP_DISPATCH_FF.S */ 6434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 6435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 6436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size dvmAsmInstructionStart, .-dvmAsmInstructionStart 6441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmInstructionEnd 6442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionEnd: 6443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 6445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 6446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sister implementations 6447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * =========================================================================== 6448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmSisterStart 6450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmAsmSisterStart, %function 6451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 6452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 4 6453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterStart: 6454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_STRING */ 6456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* This is the less common path, so we'll redo some work 6458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project here rather than force spills on the common path */ 6459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_STRING_resolve: 6460f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 6461f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %ecx,rINST # rINST<- AA 6462f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 6464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax 6466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveString # go resolve 6469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 6471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 6472f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6473f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6474f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_STRING_JUMBO */ 6477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* This is the less common path, so we'll redo some work 6479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project here rather than force spills on the common path */ 6480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_STRING_JUMBO_resolve: 6481f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 6482f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %ecx,rINST # rINST<- AA 6483f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 6485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBBBBB 6486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax 6487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveString # go resolve 6490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 6492f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 6493f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 6494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 6495f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CONST_CLASS */ 6498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* This is the less common path, so we'll redo some work 6500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project here rather than force spills on the common path */ 6501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CONST_CLASS_resolve: 6502f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 6503f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %ecx,rINST # rINST<- AA 6504f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%eax),%eax # eax<- glue->method 6506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,OUT_ARG2(%esp) # true 6507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax 6509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # go resolve 6512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 6514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 6515f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6516f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6517f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MONITOR_ENTER */ 6520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MONITOR_ENTER_continue: 6522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmLockObject # dvmLockObject(self,object) 6525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifdef WITH_DEADLOCK_PREDICTION 6526f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 6527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlueSelf(%ecx),%ecx # ecx<- glue->self 6528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offThread_exception(%ecx),%eax 6529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 6530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne common_exceptionThrown 6531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 6532f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 6533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MONITOR_EXIT */ 6536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MONITOR_EXIT_continue: 6538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmUnlockObject # unlock(self,obj) 6539f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 6540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6541f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 6542668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee je common_exceptionThrown # no, exception pending 6543f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6544668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee.LOP_MONITOR_EXIT_errNullObject: 6545f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 # advance before throw 6546668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee jmp common_errNullObject 6547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CHECK_CAST */ 6549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 6552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds obj->clazz 6553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds class resolved from BBBB 6554f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds object 6555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_fullcheck: 6557bb08b668b174d6babcc3866201aaf1d3b7293adaElliott Hughes movl %eax,sReg0 # we'll need the desired class on failure 6558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6560bb08b668b174d6babcc3866201aaf1d3b7293adaElliott Hughes call dvmInstanceofNonTrivial # eax<- boolean result 6561bb08b668b174d6babcc3866201aaf1d3b7293adaElliott Hughes testl %eax,%eax # failed? 6562bb08b668b174d6babcc3866201aaf1d3b7293adaElliott Hughes jne .LOP_CHECK_CAST_okay # no, success 6563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6564bb08b668b174d6babcc3866201aaf1d3b7293adaElliott Hughes # A cast has failed. We need to throw a ClassCastException. 6565f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6566bb08b668b174d6babcc3866201aaf1d3b7293adaElliott Hughes movl offObject_clazz(rINST),%eax 6567bb08b668b174d6babcc3866201aaf1d3b7293adaElliott Hughes movl %eax,OUT_ARG0(%esp) # arg0<- obj->clazz 6568bb08b668b174d6babcc3866201aaf1d3b7293adaElliott Hughes movl sReg0,%ecx 6569bb08b668b174d6babcc3866201aaf1d3b7293adaElliott Hughes movl %ecx,OUT_ARG1(%esp) # arg1<- desired class 6570bb08b668b174d6babcc3866201aaf1d3b7293adaElliott Hughes call dvmThrowClassCastException 6571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path, and we're 6575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * going to have to recreate some data. 6576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6577f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds object 6578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolve: 6580f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 6581f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 6584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 6585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- metho->clazz 6586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 6587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 6588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- resolved ClassObject ptr 6589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 6590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yes, handle exception 6591f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offObject_clazz(rINST),%ecx # ecx<- obj->clazz 6592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CHECK_CAST_resolved # pick up where we left off 6593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INSTANCE_OF */ 6595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test failed, need to perform full check. This is common. 6598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds obj->clazz 6599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class resolved from BBBB 6600f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST has BA 6601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_fullcheck: 6603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 6605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInstanceofNonTrivial # eax<- boolean result 6606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # fall through to OP_INSTANCE_OF_store 6607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds boolean result 6610f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds BA 6611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_store: 6613f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6614f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # <- A 6615f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6616f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST # vA<- eax 6617f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Trivial test succeeded, save and bail. 6621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9 holds A 6622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_trivial: 6624f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6625f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # <- A 6626f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%eax 6628f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST # vA<- true 6629f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 6633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6634f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * edx holds BBBB 6635f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds BA 6636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolve: 6638f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # arg1<- BBBB 6639f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 6640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx 6641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,OUT_ARG2(%esp) # arg2<- true 6642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6643f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 6645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- resolved ClassObject ptr 6646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Now, we need to sync up with fast path. We need eax to 6649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * hold the obj->clazz, and ecx to hold the resolved class 6650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved class 6652f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax # eax<- BA 6653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 6654f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB (obj) 6655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- obj->clazz 6656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INSTANCE_OF_resolved 6657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_NEW_INSTANCE */ 6659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_initialized: # on entry, ecx<- class 6661b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden /* TODO: remove test for interface/abstract, now done in verifier */ 6662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl $(ACC_INTERFACE|ACC_ABSTRACT),offClassObject_accessFlags(%ecx) 6663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG1(%esp) 6664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_INSTANCE_abstract 6665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_finish: # ecx=class 6666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocObject # eax<- new object 6668f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, bail out 6671f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 6672f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6673f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class initialization required. 6677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class object 6679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_needinit: 6681f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save object 6682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInitClass # initialize class 6684f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) # restore object 6685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # success? 6686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_INSTANCE_initialized # success, continue 6687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # go deal with init exception 6688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolution required. This is the least-likely path. 6691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolve: 6694f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 6695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 6696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 6697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) 6700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # call(clazz,off,flags) 6702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved ClassObject ptr 6703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # success? 6704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_INSTANCE_resolved # good to go 6705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 6706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6708b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden * TODO: remove this 6709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We can't instantiate an abstract class or interface, so throw an 6710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * InstantiationError with the class descriptor as the message. 6711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class object 6713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_abstract: 6715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%ecx),%eax 6716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrInstantiationError,OUT_ARG0(%esp) 6717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowExceptionWithClassMessage 6719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_NEW_ARRAY */ 6722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolve class. (This is an uncommon case.) 6725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class (null here) 6726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array length (vB) 6727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_ARRAY_resolve: 6729f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 6730f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%eax) # save array length 6731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 6732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- CCCC 6733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) 6736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 6738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx 6739f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%eax) 6740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # successful resolution? 6741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, bail. 6742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# fall through to OP_NEW_ARRAY_finish 6743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Finish allocation 6746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds class 6748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array length (vB) 6749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_ARRAY_finish: 6751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 6752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) 6754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAllocArrayByClass # eax<- call(clazz,length,flags) 6755f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 6757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yup - go handle 6758f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 6759f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6760f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY */ 6763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_more: 6765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 6766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 6767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 6768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yes, handle it 6770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # note: fall through to .LOP_FILLED_NEW_ARRAY_continue 6772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 6775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array class [r0] 6776f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds AA or BB [r10] 6777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is scratch 6778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_continue: 6780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%eax),%ecx # ecx<- arrayClass->descriptor 6781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) # arg2<- flags 6782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 1(%ecx),%ecx # ecx<- descriptor[1] 6783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- arrayClass 6784f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 6785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'I',%cl # supported? 6786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'L',%cl 6788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'[',%cl 6790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_notimpl # no, not handled yet 6791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 67923d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,offGlue_retval+4(%eax) # save type 6793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(rINST) # save copy, need "B" later 6795f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST 6796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6797f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,OUT_ARG1(%esp) # arg1<- A or AA (length) 6798f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmAllocArrayByClass # eax<- call(arrayClass, length, flags) 6799f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 6800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # alloc successful? 6801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.l<- new array 6803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- FEDC or CCCC 6804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax),%eax # eax<- newArray->contents 6805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* at this point: 6807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax is pointer to tgt 6808f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST is length 6809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is FEDC or CCCC 68107dc44a1c9a37d528f080eb51739da80696bb1f05buzbee * TMP_SPILL1 is BA 6811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We now need to copy values from registers into the array 6812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 6815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # set up src pointer 6816f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP2(%esi) 6817f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP3(%edi) 6818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),%esi # set up src ptr 68197dc44a1c9a37d528f080eb51739da80696bb1f05buzbee movl %eax,%edi # set up dst ptr 6820f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%ecx # load count register 6821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rep 6822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsd 6823f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP2(%esi) 6824f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP3(%edi) 6825f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 68263d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_retval+4(%ecx),%eax # eax<- type 6827f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 6828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 6829f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 6830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 4f 68317dc44a1c9a37d528f080eb51739da80696bb1f05buzbee UNSPILL_TMP1(%edx) # restore "BA" 6832f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl $0x0f,%edx # edx<- 0000000A 6833f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sall $16,%edx # edx<- 000A0000 6834f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee orl %ecx,%edx # edx<- 000AFEDC 6835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: 6836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 6837f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %edx,%ecx # ecx<- next reg to load 6838f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 6839f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shrl $4,%edx 6840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal 4(%eax),%eax 6841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,-4(%eax) 6842f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sub $1,rINST 6843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 3b 6844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project4: 6845f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 68463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_retval+4(%ecx),%eax # eax<- type 6847f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 6848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 68503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee cmpb $'I',%al # Int array? 68513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je 5f # skip card mark if so 68523d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_retval(%ecx),%eax # eax<- object head 68533d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%ecx),%ecx # card table base 68543d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee shrl $GC_CARD_SHIFT,%eax # convert to card num 6855d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee movb %cl,(%ecx,%eax) # mark card based on object head 68563d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee5: 6857f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 6858f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception indicating that we have not implemented this 6863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mode of filled-new-array. 6864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_notimpl: 6866f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $.LstrInternalErrorA,%eax 6867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6868f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $.LstrFilledNewArrayNotImplA,%eax 6869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 6871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FILLED_NEW_ARRAY_RANGE */ 6874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_more: 6876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 6877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 6878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveClass # eax<- call(clazz,ref,flag) 6879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # yes, handle it 6881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # note: fall through to .LOP_FILLED_NEW_ARRAY_RANGE_continue 6883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 6886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds array class [r0] 6887f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds AA or BB [r10] 6888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is scratch 6889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_continue: 6891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_descriptor(%eax),%ecx # ecx<- arrayClass->descriptor 6892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) # arg2<- flags 6893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 1(%ecx),%ecx # ecx<- descriptor[1] 6894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- arrayClass 6895f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 6896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'I',%cl # supported? 6897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'L',%cl 6899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 6900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $'[',%cl 6901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_RANGE_notimpl # no, not handled yet 6902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 69033d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,offGlue_retval+4(%eax) # save type 6904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6905f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(rINST) # save copy, need "B" later 6906f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST 6907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6908f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,OUT_ARG1(%esp) # arg1<- A or AA (length) 6909f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmAllocArrayByClass # eax<- call(arrayClass, length, flags) 6910f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 6911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # alloc successful? 6912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_retval(%ecx) # retval.l<- new array 6914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- FEDC or CCCC 6915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax),%eax # eax<- newArray->contents 6916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* at this point: 6918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax is pointer to tgt 6919f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST is length 6920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx is FEDC or CCCC 69217dc44a1c9a37d528f080eb51739da80696bb1f05buzbee * TMP_SPILL1 is BA 6922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We now need to copy values from registers into the array 6923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 6926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # set up src pointer 6927f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP2(%esi) 6928f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP3(%edi) 6929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),%esi # set up src ptr 69307dc44a1c9a37d528f080eb51739da80696bb1f05buzbee movl %eax,%edi # set up dst ptr 6931f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%ecx # load count register 6932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rep 6933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsd 6934f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP2(%esi) 6935f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP3(%edi) 6936f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 69373d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_retval+4(%ecx),%eax # eax<- type 6938f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 6939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 6940f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 6941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 4f 69427dc44a1c9a37d528f080eb51739da80696bb1f05buzbee UNSPILL_TMP1(%edx) # restore "BA" 6943f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl $0x0f,%edx # edx<- 0000000A 6944f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sall $16,%edx # edx<- 000A0000 6945f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee orl %ecx,%edx # edx<- 000AFEDC 6946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: 6947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 6948f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %edx,%ecx # ecx<- next reg to load 6949f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 6950f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shrl $4,%edx 6951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal 4(%eax),%eax 6952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,-4(%eax) 6953f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sub $1,rINST 6954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 3b 6955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project4: 6956f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 69573d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_retval+4(%ecx),%eax # eax<- type 6958f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 6959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 69613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee cmpb $'I',%al # Int array? 69623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je 5f # skip card mark if so 69633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_retval(%ecx),%eax # eax<- object head 69643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%ecx),%ecx # card table base 69653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee shrl $GC_CARD_SHIFT,%eax # convert to card num 6966d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee movb %cl,(%ecx,%eax) # mark card based on object head 69673d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee5: 6968f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 6969f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception indicating that we have not implemented this 6974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mode of filled-new-array. 6975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FILLED_NEW_ARRAY_RANGE_notimpl: 6977f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $.LstrInternalErrorA,%eax 6978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 6979f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $.LstrFilledNewArrayNotImplA,%eax 6980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 6981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 6982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 6983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPL_FLOAT */ 6985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_isNaN: 6987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $-1,%ecx 6988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPL_FLOAT_finish 6989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPG_FLOAT */ 6991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_isNaN: 6993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%ecx 6994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPG_FLOAT_finish 6995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPL_DOUBLE */ 6997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_isNaN: 6999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $-1,%ecx 7000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPL_DOUBLE_finish 7001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMPG_DOUBLE */ 7003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_isNaN: 7005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%ecx 7006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMPG_DOUBLE_finish 7007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_CMP_LONG */ 7009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_bigger: 7011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $1,%ecx 7012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMP_LONG_finish 7013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_smaller: 7014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $-1,%ecx 7015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMP_LONG_finish: 7016f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx rINST 7017f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7018f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7019f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_AGET_WIDE */ 7022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_AGET_WIDE_finish: 7024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,8),%eax 7025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax),%ecx 7026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%eax),%eax 7027f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx rINST 0 7028f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 7029f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7030f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7031f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_APUT_WIDE */ 7034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_WIDE_finish: 7036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,8),%eax 7037f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx rINST 0 7038f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST rINST 1 7039f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,4(%eax) 7040f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,(%eax) 7042f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7043f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_APUT_OBJECT */ 7046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* On entry: 7048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax<- array object 7049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx<- index 7050f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST<- vAA 7051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_OBJECT_continue: 7053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,4),%ecx 7054d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee testl rINST,rINST # storing null reference? 7055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_APUT_OBJECT_skip_check 7056d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee SPILL_TMP1(%ecx) # save target address 7057d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee SPILL_TMP2(%eax) # save object head 7058d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee movl offObject_clazz(%eax),%eax # eax<- arrayObj->clazz 7059d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee movl offObject_clazz(rINST),%ecx # ecx<- obj->clazz 7060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 706263644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes movl %ecx,sReg0 # store the two classes for later 706363644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes movl %eax,sReg1 7064d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee call dvmCanPutArrayElement # test object type vs. array type 7065d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee UNSPILL_TMP1(%ecx) # recover target address 7066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7067f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 706863644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes jne .LOP_APUT_OBJECT_types_okay 706963644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes 707063644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes # The types don't match. We need to throw an ArrayStoreException. 707163644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes EXPORT_PC 707263644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes movl sReg0,%eax # restore the two classes... 707363644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes movl %eax,OUT_ARG0(%esp) 707463644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes movl sReg1,%ecx 707563644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes movl %ecx,OUT_ARG1(%esp) 707663644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes call dvmThrowArrayStoreException # ...and throw 707763644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes jmp common_exceptionThrown 707863644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes 707963644657f74e0a5d05f2c5fb56a18872e7ac7427Elliott Hughes.LOP_APUT_OBJECT_types_okay: 70803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%eax),%eax # get card table base 7081d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee movl rINST,(%ecx) # store into array 7082d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee UNSPILL_TMP2(%ecx) # recover object head 7083f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7084d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee shrl $GC_CARD_SHIFT,%ecx # object head to card number 7085d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee movb %al,(%eax,%ecx) # mark card using object head 7086f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7087f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_APUT_OBJECT_skip_check: 7090f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,(%ecx) 7091f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7092f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7093f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET */ 7096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_resolve: 7099f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7100f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7101f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7102f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 7103f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 7104f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7105f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7106f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 7107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_finish 7108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_finish: 7111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7115f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7116f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 7117f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7118f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # object null? 7119f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je common_errNullObject # object was null 7120f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7121f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax # eax<- A 7122f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7123f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 7124f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_WIDE */ 7128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_WIDE_resolve: 7131f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7132f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7133f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7134f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save objpointer across call 7135f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rPC,OUT_ARG0(%esp) # pass in method->clazz 7136f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7137f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7138f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 7139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_WIDE_finish 7140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_WIDE_finish: 7143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7147f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7148f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 7149f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7150f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # object null? 7151f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je common_errNullObject # object was null 7152f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (%ecx,%eax,1),%eax # eax<- address of field 7153f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax),%ecx # ecx<- lsw 7154f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4(%eax),%eax # eax<- msw 7155f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7156f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx rINST 0 7157f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 7158f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7159f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_OBJECT */ 7162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_OBJECT_resolve: 7165f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7166f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7167f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7168f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 7169f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 7170f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7171f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7172f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 7173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_OBJECT_finish 7174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_OBJECT_finish: 7177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7181f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7182f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 7183f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7184f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # object null? 7185f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je common_errNullObject # object was null 7186f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7187f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax # eax<- A 7188f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7189f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 7190f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7191f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_BOOLEAN */ 7194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BOOLEAN_resolve: 7197f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7198f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7199f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7200f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 7201f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 7202f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7203f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7204f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 7205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BOOLEAN_finish 7206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BOOLEAN_finish: 7209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7213f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7214f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 7215f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7216f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # object null? 7217f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je common_errNullObject # object was null 7218f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7219f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax # eax<- A 7220f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7221f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 7222f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7223f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_BYTE */ 7226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BYTE_resolve: 7229f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7230f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7231f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7232f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 7233f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 7234f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7235f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7236f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 7237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_BYTE_finish 7238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_BYTE_finish: 7241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7245f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7246f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 7247f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7248f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # object null? 7249f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je common_errNullObject # object was null 7250f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movsbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7251f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax # eax<- A 7252f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7253f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 7254f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7255f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_CHAR */ 7258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_CHAR_resolve: 7261f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7262f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7263f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7264f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 7265f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 7266f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7267f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7268f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 7269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_CHAR_finish 7270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_CHAR_finish: 7273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7277f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7278f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 7279f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7280f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # object null? 7281f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je common_errNullObject # object was null 7282f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7283f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax # eax<- A 7284f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7285f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 7286f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7287f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IGET_SHORT */ 7290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_SHORT_resolve: 7293f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7294f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7295f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7296f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 7297f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 7298f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7299f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7300f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 7301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IGET_SHORT_finish 7302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IGET_SHORT_finish: 7305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7309f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7310f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 7311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7312f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # object null? 7313f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je common_errNullObject # object was null 7314f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 7315f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax # eax<- A 7316f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7317f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 7318f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7319f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT */ 7322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_resolve: 7325f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7326f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7327f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7328f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 7329f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 7330f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7331f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7332f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 7333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_finish 7334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_finish: 7337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7341f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7343f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- v[A] 7344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7347f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7348f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7349f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7350f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_WIDE */ 7353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_WIDE_resolve: 7356f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7357f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7358f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7359f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 7360f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 7361f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7362f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7363f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # ... which returns InstrField ptr 7364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_WIDE_finish 7365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_WIDE_finish: 7368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * %edx is scratch, but needs to be unspilled 7373f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7374f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 7375f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7376f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # object null? 7377f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je common_errNullObject # object was null 7378f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (%ecx,%eax,1),%eax # eax<- address of field 7379f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx rINST 0 # ecx<- lsw 7380f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST rINST 1 # rINST<- msw 7381f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7382f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,4(%eax) 7383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,(%eax) 7384f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7385f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_OBJECT */ 7388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_OBJECT_resolve: 7391f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7392f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7393f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7394f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 7395f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 7396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7398f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 7399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_OBJECT_finish 7400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_OBJECT_finish: 7403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7407f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * %edx is scratch, but needs to be unspilled 7408f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7409f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 7410f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- v[A] 7411f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7412f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # object null? 7413f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je common_errNullObject # object was null 7414f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,(%ecx,%eax) # obj.field <- v[A](8/16/32 bits) 7415f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 7416f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST # stored a NULL? 7417f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_cardTable(%eax),%eax # get card table base 7418f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7419f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je 1f # skip card mark if null store 7420f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shrl $GC_CARD_SHIFT,%ecx # object head to card number 7421d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee movb %al,(%eax,%ecx) # mark card using object head 74223d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee1: 7423f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7424f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_BOOLEAN */ 7427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BOOLEAN_resolve: 7430f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7431f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7432f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7433f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 7434f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 7435f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7436f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7437f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 7438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_BOOLEAN_finish 7439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BOOLEAN_finish: 7442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7446f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7448f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- v[A] 7449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7453f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movb rINSTbl,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7454f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7455f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_BYTE */ 7458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BYTE_resolve: 7461f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7462f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7463f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7464f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 7465f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 7466f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7467f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7468f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 7469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_BYTE_finish 7470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_BYTE_finish: 7473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7479f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- v[A] 7480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7483f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7484f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movb rINSTbl,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7485f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7486f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_CHAR */ 7489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_CHAR_resolve: 7492f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7493f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7495f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 7496f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 7497f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7498f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7499f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 7500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_CHAR_finish 7501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_CHAR_finish: 7504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7508f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7510f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- v[A] 7511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7515f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movw rINSTw,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7516f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7517f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_IPUT_SHORT */ 7520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_SHORT_resolve: 7523f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 7524f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 7525f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 7526f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 7527f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 7528f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 7529f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7530f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 7531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_IPUT_SHORT_finish 7532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_IPUT_SHORT_finish: 7535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Currently: 7537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax holds resolved field 7538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds object 7539f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 7540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7541f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- v[A] 7542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 7543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # object null? 7544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # object was null 7545f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7546f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movw rINSTw,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 7547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7548f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET */ 7551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_resolve: 7556f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7559f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_finish # success, continue 7566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_WIDE */ 7569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_resolve: 7574f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7577f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_WIDE_finish # success, continue 7584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_OBJECT */ 7587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_resolve: 7592f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7595f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_OBJECT_finish # success, continue 7602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_BOOLEAN */ 7605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_resolve: 7610f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7613f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_BOOLEAN_finish # success, continue 7620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_BYTE */ 7623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_resolve: 7628f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7631f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_BYTE_finish # success, continue 7638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_CHAR */ 7641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_resolve: 7646f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7649f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_CHAR_finish # success, continue 7656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SGET_SHORT */ 7659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_resolve: 7664f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7667f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SGET_SHORT_finish # success, continue 7674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT */ 7677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_resolve: 7682f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7685f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_finish # success, continue 7692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_WIDE */ 7695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_WIDE_resolve: 7700f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7703f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_WIDE_finish # success, continue 7710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_OBJECT */ 7713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 77143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 77153d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SPUT_OBJECT_continue: 7716d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee movl %ecx,offStaticField_value(%eax) # do the store 7717d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee testl %ecx,%ecx # stored null object ptr? 7718f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 7719d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee je 1f # skip card mark if null 77207c1f9b34d49aa7cea9b830226e33e95d7608cf76buzbee movl rGLUE,%ecx 77217c1f9b34d49aa7cea9b830226e33e95d7608cf76buzbee movl offField_clazz(%eax),%eax # eax<- method->clazz 77223d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%ecx),%ecx # get card table base 77233d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee shrl $GC_CARD_SHIFT,%eax # head to card number 77243d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movb %cl,(%ecx,%eax) # mark card 77253d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee1: 7726f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 7727f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 77283d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 7729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_OBJECT_resolve: 7730f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7733f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_OBJECT_finish # success, continue 7740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_BOOLEAN */ 7743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_resolve: 7748f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7751f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_BOOLEAN_finish # success, continue 7758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_BYTE */ 7761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_resolve: 7766f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7769f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_BYTE_finish # success, continue 7776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_CHAR */ 7779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_resolve: 7784f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7787f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_CHAR_finish # success, continue 7794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SPUT_SHORT */ 7797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 7800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_resolve: 7802f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 7804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- current method 7805f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 7806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 7810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_SPUT_SHORT_finish # success, continue 7812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # no, handle exception 7813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL */ 7815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_more: 7818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # ecx<- method->clazz 7819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 7820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags 7821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_continue # no, continue 7824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # yes, handle exception 7825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = resolved base method 7828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = scratch 7829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_continue: 7831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- GFED or CCCC 7832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 7833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%ecx # ecx<- D (or stays CCCC) 7834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7835f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- "this" 7836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%eax),%eax # eax<- baseMethod->methodIndex 7837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null this? 7838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # go if so 7839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%ecx),%ecx # ecx<- thisPtr->clazz 7840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable 7841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- vtable[methodIndex] 7842c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 7843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_SUPER */ 7845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 7848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method [r0] 7849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz [r9] 7850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_continue: 7852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%eax),%eax # eax<- method->clazz->super 7853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%ecx),%ecx # ecx<- baseMthod->methodIndex 7854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount) 7855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae .LOP_INVOKE_SUPER_nsm # method not present in superclass 7856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- ...clazz->super->vtable 7857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[methodIndex] 7858c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 7859c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 7860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = null (needs to be resolved base method) 7863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz 7864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_resolve: 7866f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%eax) # method->clazz 7867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- method->clazz 7868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 7869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- resolver method type 7870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 7871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved base method 7874f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%eax) # restore method->clazz 7875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_continue # good to go - continue 7876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # handle exception 7877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 7880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method 7881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_nsm: 7883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_name(%ecx),%eax 7884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov %eax,OUT_ARG1(%esp) 7885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNoSuchMethod 7886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_DIRECT */ 7888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 7891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL <- "this" register 7892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Things a bit ugly on this path, but it's the less 7893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * frequent one. We'll have to do some reloading. 7894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_resolve: 7896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) 7897f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 7898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 7899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # reference (BBBB or CCCC) 7900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 7901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_DIRECT,OUT_ARG2(%esp) 7902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 7903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 7904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7905f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 7906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_DIRECT_finish 7908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_STATIC */ 7911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_STATIC_continue: 7913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_STATIC,%eax 7914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- flags 7915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # call(clazz,ref,flags) 7916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7917c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange 7918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 7919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_INTERFACE */ 7921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_INTERFACE_continue: 7923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex) 7924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 7925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 7926c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 7927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_VIRTUAL_RANGE */ 7929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_RANGE_more: 7932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # ecx<- method->clazz 7933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- clazz 7934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags 7935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_RANGE_continue # no, continue 7938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # yes, handle exception 7939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = resolved base method 7942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = scratch 7943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_VIRTUAL_RANGE_continue: 7945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- GFED or CCCC 7946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 7947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%ecx # ecx<- D (or stays CCCC) 7948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 7949f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- "this" 7950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%eax),%eax # eax<- baseMethod->methodIndex 7951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null this? 7952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # go if so 7953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%ecx),%ecx # ecx<- thisPtr->clazz 7954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable 7955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- vtable[methodIndex] 7956c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 7957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_SUPER_RANGE */ 7959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * At this point: 7962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method [r0] 7963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz [r9] 7964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_continue: 7966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%eax),%eax # eax<- method->clazz->super 7967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offMethod_methodIndex(%ecx),%ecx # ecx<- baseMthod->methodIndex 7968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount) 7969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jae .LOP_INVOKE_SUPER_RANGE_nsm # method not present in superclass 7970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- ...clazz->super->vtable 7971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[methodIndex] 7972c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 7973c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 7974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point: 7976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = null (needs to be resolved base method) 7977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = method->clazz 7978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_resolve: 7980f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%eax) # method->clazz 7981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- method->clazz 7982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 7983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- resolver method type 7984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 7985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 7986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 7987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%ecx # ecx<- resolved base method 7988f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%eax) # restore method->clazz 7989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_RANGE_continue # good to go - continue 7990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown # handle exception 7991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw a NoSuchMethodError with the method name as the message. 7994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = resolved base method 7995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 7996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_SUPER_RANGE_nsm: 7997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_name(%ecx),%eax 7998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov %eax,OUT_ARG1(%esp) 7999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNoSuchMethod 8000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_DIRECT_RANGE */ 8002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TMP_SPILL <- "this" register 8006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Things a bit ugly on this path, but it's the less 8007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * frequent one. We'll have to do some reloading. 8008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_resolve: 8010f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) 8011f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 8012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 8013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # reference (BBBB or CCCC) 8014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 8015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_DIRECT,OUT_ARG2(%esp) 8016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 8018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # eax<- call(clazz, ref, flags) 8019f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 8020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 8021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_DIRECT_RANGE_finish 8022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_STATIC_RANGE */ 8025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_STATIC_RANGE_continue: 8027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $METHOD_STATIC,%eax 8028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- flags 8029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveMethod # call(clazz,ref,flags) 8030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # got null? 8031c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange 8032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 8033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_INVOKE_INTERFACE_RANGE */ 8035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_INTERFACE_RANGE_continue: 8037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex) 8038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 8039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 8040c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 8041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FLOAT_TO_INT */ 8043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_continue: 8046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 8048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 8049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 8050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 8052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_FLOAT_TO_INT_special_case # fix up result 8054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_finish: 8056f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 8057f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_special_case: 8060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 8061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 8062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_FLOAT_TO_INT_isNaN 8063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 8064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 8066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_INT_finish 8068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_INT_isNaN: 8069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 8070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 8072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_INT_finish 8074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_FLOAT_TO_LONG */ 8076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_continue: 8079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 8081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 8082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 8083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 8085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_FLOAT_TO_LONG_special_case # fix up result 8087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_finish: 8089f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 8090f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_special_case: 8093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 8094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 8095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_FLOAT_TO_LONG_isNaN 8096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 8097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 8099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_finish 8101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_FLOAT_TO_LONG_isNaN: 8102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 8103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 8105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_finish 8107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DOUBLE_TO_INT */ 8109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_continue: 8112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 8114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 8115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 8116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 8118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DOUBLE_TO_INT_special_case # fix up result 8120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_finish: 8122f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 8123f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_special_case: 8126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 8127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 8128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_DOUBLE_TO_INT_isNaN 8129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 8130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 8132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_finish 8134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_INT_isNaN: 8135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 8136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 8137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 8138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_finish 8140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DOUBLE_TO_LONG */ 8142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_continue: 8145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 8147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax 8148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl (rFP,%ecx,4),%eax 8149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 8150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,(rFP,%ecx,4) 8151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DOUBLE_TO_LONG_special_case # fix up result 8153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_finish: 8155f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 8156f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_special_case: 8159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 8160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 8161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_DOUBLE_TO_LONG_isNaN 8162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,(rFP,%ecx,4) 8163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $-1,4(rFP,%ecx,4) 8165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_finish 8167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DOUBLE_TO_LONG_isNaN: 8168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,(rFP,%ecx,4) 8169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 8170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,4(rFP,%ecx,4) 8171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 8172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_finish 8173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT */ 8175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_continue_div: 8176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_finish_div: 8179f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 8180f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 8181f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8182f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT */ 8185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_continue_div: 8186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_finish_div: 8189f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %edx rINST 8190f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 8191f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8192f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MUL_LONG */ 8195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MUL_LONG_continue: 81973b8a9072510222067b7c48fe2d59d1e58436be24buzbee leal (%ecx,%edx),%edx # full result now in %edx:%eax 81983b8a9072510222067b7c48fe2d59d1e58436be24buzbee UNSPILL_TMP2(%esi) # Restore Dalvik PC 81993b8a9072510222067b7c48fe2d59d1e58436be24buzbee FETCH_INST_OPCODE 2 %ecx # Fetch next instruction 8200f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,4(rFP,rINST,4) # v[B+1]<- %edx 8201f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %eax,(rFP,rINST,4) # v[B]<- %eax 8202f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8203f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %ecx 8204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_LONG */ 8206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_continue: 8208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __divdi3 8209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_finish: 8210f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 8211f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 8212f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 8213f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8214f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_check_zero: 8217f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %edx,%edx 8218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial 8219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_check_neg1: 8221f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %edx,%eax 8222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial 8223f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %ecx 0 8224f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 8225f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %edx,%edx 8226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial1 8227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_notSpecial1 8229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%edx 8232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_finish 8233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_LONG */ 8235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_continue: 8237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __moddi3 8238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_finish: 8239f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 8240f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 8241f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 8242f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8243f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_check_zero: 8246f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %edx,%edx 8247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial 8248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_check_neg1: 8250f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %edx,%eax 8251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial 8252f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %ecx 0 8253f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 8254f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %edx,%edx 8255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial1 8256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_notSpecial1 8258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 8261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_finish 8262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHL_LONG */ 8264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHL_LONG_finish: 8266f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[AA+0]<- %eax 8267f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8268f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHR_LONG */ 8271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHR_LONG_finish: 8274f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[AA+0]<- eax 8275f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8276f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_USHR_LONG */ 8279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_USHR_LONG_finish: 8282f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[BB+0]<- eax 8283f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8284f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT_2ADDR */ 8287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_2ADDR_continue_div2addr: 8288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_2ADDR_finish_div2addr: 8291f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 8292f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 8293f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 8294f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT_2ADDR */ 8297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_2ADDR_continue_div2addr: 8298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_2ADDR_finish_div2addr: 8301f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %edx rINST 8302f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 8303f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 8304f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_MUL_LONG_2ADDR */ 8307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_MUL_LONG_2ADDR_continue: 8309f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (%ecx,%edx),%edx # full result now in %edx:%eax 8310f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,4(%esi) # v[A+1]<- %edx 8311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %eax,(%esi) # v[A]<- %eax 8312f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP2(%esi) 8313f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %ecx 8314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 8315f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 8316f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %ecx 8317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_LONG_2ADDR */ 8319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_continue: 8321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 8322f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) 8323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 8324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __divdi3 8325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_finish: 8326f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 8327f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 8328f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 8329f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 8330f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_check_zero: 8333f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %edx,%edx 8334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial 8335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_check_neg1: 8337f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %edx,%eax 8338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial 8339f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx rINST 0 8340f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx rINST 1 8341f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %edx,%edx 8342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial1 8343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_LONG_2ADDR_notSpecial1 8345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%edx 8348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_2ADDR_finish 8349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_LONG_2ADDR */ 8351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_continue: 8353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 8354f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) 8355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 8356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call __moddi3 8357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_finish: 8358f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 8359f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 8360f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 8361f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 8362f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_check_zero: 8365f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %edx,%edx 8366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial 8367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errDivideByZero 8368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_check_neg1: 8369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %edx,%eax 8370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial 8371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx rINST 0 8372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx rINST 1 8373f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %edx,%edx 8374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial1 8375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%ecx 8376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_LONG_2ADDR_notSpecial1 8377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* minint / -1, return minint on div, 0 on rem */ 8378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 8379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 8380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_2ADDR_finish 8381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHL_LONG_2ADDR */ 8383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHL_LONG_2ADDR_finish: 8386f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 8387f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[AA+0]<- eax 8388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 8389f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_SHR_LONG_2ADDR */ 8392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SHR_LONG_2ADDR_finish: 8395f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 8396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[AA+0]<- eax 8397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 8398f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_USHR_LONG_2ADDR */ 8401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_USHR_LONG_2ADDR_finish: 8404f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 8405f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[AA+0]<- eax 8406f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 8407f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT_LIT16 */ 8410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT16_continue_div: 8411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT16_finish_div: 8414f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 8415f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 8416f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8417f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT_LIT16 */ 8420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT16_continue_div: 8421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT16_finish_div: 8424f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %edx rINST 8425f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 8426f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8427f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_DIV_INT_LIT8 */ 8430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT8_continue_div: 8431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_INT_LIT8_finish_div: 8434f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 8435f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 8436f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8437f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_REM_INT_LIT8 */ 8440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT8_continue_div: 8441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 8442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 8443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_INT_LIT8_finish_div: 8444f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %edx rINST 8445f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 8446f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8447f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 8448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 84493d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_IGET_VOLATILE */ 84503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 84513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 84523d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IGET_VOLATILE_resolve: 8453f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 8454f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 8455f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 8456f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 8457f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 8458f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 8459f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 8460f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 84613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_IGET_VOLATILE_finish 84623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown 84633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 84643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IGET_VOLATILE_finish: 84653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 84663d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Currently: 84673d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * eax holds resolved field 84683d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * ecx holds object 8469f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 8470f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 8471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 8472f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # object null? 8473f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je common_errNullObject # object was null 8474f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 8475f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax # eax<- A 8476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 8477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 8478f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8479f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 84803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 84813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_IPUT_VOLATILE */ 84823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 84833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 84843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IPUT_VOLATILE_resolve: 8485f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 8486f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 8487f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 8488f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 8489f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 8490f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 8491f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 8492f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 84933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_IPUT_VOLATILE_finish 84943d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown 84953d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 84963d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IPUT_VOLATILE_finish: 84973d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 84983d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Currently: 84993d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * eax holds resolved field 85003d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * ecx holds object 8501f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 85023d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 8503f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- v[A] 85043d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 85053d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %ecx,%ecx # object null? 85063d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je common_errNullObject # object was null 8507f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 8508f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 8509f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8510f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 85113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_SGET_VOLATILE */ 85133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 85153d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Go resolve the field 85163d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 85173d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SGET_VOLATILE_resolve: 8518f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 85193d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 85203d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_method(%ecx),%ecx # ecx<- current method 8521f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 85223d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 85233d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %eax,OUT_ARG1(%esp) 85243d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,OUT_ARG0(%esp) 85253d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveStaticField # eax<- resolved StaticField ptr 85263d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax 85273d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_SGET_VOLATILE_finish # success, continue 85283d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown # no, handle exception 85293d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85303d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_SPUT_VOLATILE */ 85313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85323d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 85333d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Go resolve the field 85343d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 85353d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SPUT_VOLATILE_resolve: 8536f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 85373d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 85383d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_method(%ecx),%ecx # ecx<- current method 8539f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 85403d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 85413d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %eax,OUT_ARG1(%esp) 85423d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,OUT_ARG0(%esp) 85433d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveStaticField # eax<- resolved StaticField ptr 85443d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax 85453d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_SPUT_VOLATILE_finish # success, continue 85463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown # no, handle exception 85473d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_IGET_OBJECT_VOLATILE */ 85493d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IGET_OBJECT_VOLATILE_resolve: 8552f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 8553f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 8554f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 8555f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 8556f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 8557f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 8558f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 8559f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 85603d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_IGET_OBJECT_VOLATILE_finish 85613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown 85623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 85633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IGET_OBJECT_VOLATILE_finish: 85643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 85653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Currently: 85663d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * eax holds resolved field 85673d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * ecx holds object 8568f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 8569f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 8570f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 8571f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # object null? 8572f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je common_errNullObject # object was null 8573f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 8574f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax # eax<- A 8575f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 8576f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 8577f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8578f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 85793d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 8580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* continuation for OP_EXECUTE_INLINE */ 8581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_EXECUTE_INLINE_continue: 8583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Extract args, call function. 8585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx = #of args (0-4) 8586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * eax = call index 8587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @esp = return addr 8588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * esp is -4 from normal 8589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go ahead and load all 4 args, even if not used. 8591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8592f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 4(rPC),%edx 8593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8595f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %edx,%ecx 8596f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 8597f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%edx 8598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG0(%esp) 8599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8601f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %edx,%ecx 8602f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 8603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%edx 8604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG1(%esp) 8605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8607f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %edx,%ecx 8608f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 8609f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%edx 8610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG2(%esp) 8611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 8613f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %edx,%ecx 8614f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 8615f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%edx 8616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,4+OUT_ARG3(%esp) 8617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $4,%eax # index *= sizeof(table entry) 8619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp *gDvmInlineOpsTable(%eax) 8620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # will return to caller of .LOP_EXECUTE_INLINE_continue 8621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 86223d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_IPUT_OBJECT_QUICK */ 86233d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86243d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IPUT_OBJECT_QUICK_finish: 8625f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST # did we store null? 8626f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 86273d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%eax),%eax # get card table base 86283d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je 1f # skip card mark if null store 86293d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee shrl $GC_CARD_SHIFT,%ecx # object head to card number 8630d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee movb %al,(%eax,%ecx) # mark card based on object head 86313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee1: 8632f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8633f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 86343d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86353d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_IPUT_OBJECT_VOLATILE */ 86363d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86373d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86383d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IPUT_OBJECT_VOLATILE_resolve: 8639f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 8640f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_method(%edx),%edx # edx<- current method 8641f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 8642f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 8643f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 8644f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 8645f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 8646f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 86473d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_IPUT_OBJECT_VOLATILE_finish 86483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown 86493d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_IPUT_OBJECT_VOLATILE_finish: 86513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 86523d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Currently: 86533d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * eax holds resolved field 86543d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * ecx holds object 8655f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * %edx is scratch, but needs to be unspilled 8656f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds A 8657f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 8658f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- v[A] 8659f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 8660f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # object null? 8661f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je common_errNullObject # object was null 8662f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,(%ecx,%eax) # obj.field <- v[A](8/16/32 bits) 8663f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax 8664f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST # stored a NULL? 8665f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_cardTable(%eax),%eax # get card table base 8666f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 8667f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee je 1f # skip card mark if null store 8668f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shrl $GC_CARD_SHIFT,%ecx # object head to card number 8669d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee movb %al,(%eax,%ecx) # mark card using object head 86703d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee1: 8671f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8672f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 86733d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86743d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_SGET_OBJECT_VOLATILE */ 86753d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86763d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 86773d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Go resolve the field 86783d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 86793d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SGET_OBJECT_VOLATILE_resolve: 8680f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 86813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 86823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_method(%ecx),%ecx # ecx<- current method 8683f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 86843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 86853d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %eax,OUT_ARG1(%esp) 86863d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,OUT_ARG0(%esp) 86873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveStaticField # eax<- resolved StaticField ptr 86883d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax 86893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_SGET_OBJECT_VOLATILE_finish # success, continue 86903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown # no, handle exception 86913d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86923d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* continuation for OP_SPUT_OBJECT_VOLATILE */ 86933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86943d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 86953d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SPUT_OBJECT_VOLATILE_continue: 8696d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee movl %ecx,offStaticField_value(%eax) # do the store 8697d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee testl %ecx,%ecx # stored null object ptr? 8698f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 8699d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee je 1f # skip card mark if null 87007c1f9b34d49aa7cea9b830226e33e95d7608cf76buzbee movl rGLUE,%ecx 87017c1f9b34d49aa7cea9b830226e33e95d7608cf76buzbee movl offField_clazz(%eax),%eax # eax<- method->clazz 87023d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_cardTable(%ecx),%ecx # get card table base 87033d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee shrl $GC_CARD_SHIFT,%eax # head to card number 87043d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movb %cl,(%ecx,%eax) # mark card 87053d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee1: 8706f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 8707f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 87083d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 87093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SPUT_OBJECT_VOLATILE_resolve: 8710f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 87113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 87123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offGlue_method(%ecx),%ecx # ecx<- current method 8713f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 87143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 87153d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %eax,OUT_ARG1(%esp) 87163d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,OUT_ARG0(%esp) 87173d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveStaticField # eax<- resolved StaticField ptr 87183d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax 87193d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jne .LOP_SPUT_OBJECT_VOLATILE_finish # success, continue 87203d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown # no, handle exception 87213d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 8722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size dvmAsmSisterStart, .-dvmAsmSisterStart 8723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmSisterEnd 8724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterEnd: 8725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/entry.S */ 8727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 8729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 8731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 8732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 8733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 8735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 8737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 8738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 8740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 8741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 8745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdRun 8746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdRun, %function 8747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bool dvmMterpStdRun(MterpGlue* glue) 8749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interpreter entry point. Returns changeInterp. 8751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdRun: 8754f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee push %ebp # save caller base pointer 8755f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %esp, %ebp # set our %ebp 87564570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin movl rGLUE, %ecx # get incoming rGLUE 87574570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin 8758f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/* 87594570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin * At this point we've allocated one slot on the stack 8760f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * via push and stack is 8-byte aligned. Allocate space 87614570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin * for 9 spill slots, 4 local slots, 5 arg slots to bring 87624570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin * us to 16-byte alignment 8763f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 87644570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin subl $(FRAME_SIZE-4), %esp 8765f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 8766f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/* Spill callee save regs */ 8767f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edi,EDI_SPILL(%ebp) 8768f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %esi,ESI_SPILL(%ebp) 8769f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %ebx,EBX_SPILL(%ebp) 8770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Set up "named" registers */ 8772f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_pc(%ecx),rPC 8773f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_fp(%ecx),rFP 8774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Remember %esp for future "longjmp" */ 8776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %esp,offGlue_bailPtr(%ecx) 8777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* How to start? */ 8779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb offGlue_entryPoint(%ecx),%al 8780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Normal start? */ 8782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryInstr,%al 8783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .Lnot_instr 8784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Normal case: start executing the instruction at rPC */ 8786f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 8787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 8788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lnot_instr: 8790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Reset to normal case */ 8791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $kInterpEntryInstr,offGlue_entryPoint(%ecx) 8792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryReturn,%al 8793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_returnFromMethod 8794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryThrow,%al 8795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 8796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx %al,%eax 8797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 8798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrBadEntryPoint,OUT_ARG0(%esp) 8799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call printf 8800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAbort 8801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Not reached */ 8802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdBail 8805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdBail, %function 8806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * void dvmMterpStdBail(MterpGlue* glue, bool changeInterp) 8808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Restore the stack pointer and PC from the save point established on entry. 8810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is essentially the same as a longjmp, but should be cheaper. The 8811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * last instruction causes us to return to whoever called dvmMterpStdRun. 8812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We're not going to build a standard frame here, so the arg accesses will 8814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * look a little strange. 8815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 8817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * esp+4 (arg0) MterpGlue* glue 8818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * esp+8 (arg1) bool changeInterp 8819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdBail: 8821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4(%esp),%ecx # grab glue 8822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 8(%esp),%eax # changeInterp to return reg 8823f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offGlue_bailPtr(%ecx),%esp # Restore "setjmp" esp 8824c11e0e14df2c0c4264e5cc6c3e96d14832cbecadbuzbee movl %esp,%ebp 88254570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin addl $(FRAME_SIZE-4), %ebp # Restore %ebp at point of setjmp 8826f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl EDI_SPILL(%ebp),%edi 8827f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl ESI_SPILL(%ebp),%esi 8828f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl EBX_SPILL(%ebp),%ebx 88294570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin movl %ebp, %esp # strip frame 88304570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin pop %ebp # restore caller's ebp 8831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ret # return to dvmMterpStdRun's caller 8832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 8835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Strings 8836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .section .rodata 8838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrBadEntryPoint: 8839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Bad entry point %d\n" 8840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 8841f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 8842f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/* 8843f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * FIXME: Should have the config/rebuild mechanism generate this 8844f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * for targets that need it. 8845f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 8846f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 8847f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/* Jump table */ 8848f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbeedvmAsmInstructionJmpTable = .LdvmAsmInstructionJmpTable 8849f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LdvmAsmInstructionJmpTable: 8850f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NOP 8851f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE 8852f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_FROM16 8853f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_16 8854f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_WIDE 8855f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_WIDE_FROM16 8856f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_WIDE_16 8857f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_OBJECT 8858f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_OBJECT_FROM16 8859f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_OBJECT_16 8860f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_RESULT 8861f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_RESULT_WIDE 8862f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_RESULT_OBJECT 8863f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_EXCEPTION 8864f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN_VOID 8865f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN 8866f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN_WIDE 8867f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN_OBJECT 8868f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_4 8869f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_16 8870f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST 8871f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_HIGH16 8872f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_WIDE_16 8873f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_WIDE_32 8874f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_WIDE 8875f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_WIDE_HIGH16 8876f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_STRING 8877f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_STRING_JUMBO 8878f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_CLASS 8879f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MONITOR_ENTER 8880f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MONITOR_EXIT 8881f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CHECK_CAST 8882f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INSTANCE_OF 8883f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ARRAY_LENGTH 8884f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEW_INSTANCE 8885f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEW_ARRAY 8886f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FILLED_NEW_ARRAY 8887f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FILLED_NEW_ARRAY_RANGE 8888f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FILL_ARRAY_DATA 8889f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_THROW 8890f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_GOTO 8891f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_GOTO_16 8892f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_GOTO_32 8893f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_PACKED_SWITCH 8894f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPARSE_SWITCH 8895f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMPL_FLOAT 8896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMPG_FLOAT 8897f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMPL_DOUBLE 8898f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMPG_DOUBLE 8899f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMP_LONG 8900f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_EQ 8901f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_NE 8902f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_LT 8903f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_GE 8904f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_GT 8905f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_LE 8906f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_EQZ 8907f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_NEZ 8908f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_LTZ 8909f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_GEZ 8910f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_GTZ 8911f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_LEZ 8912f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_3E 8913f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_3F 8914f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_40 8915f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_41 8916f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_42 8917f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_43 8918f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET 8919f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_WIDE 8920f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_OBJECT 8921f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_BOOLEAN 8922f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_BYTE 8923f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_CHAR 8924f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_SHORT 8925f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT 8926f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_WIDE 8927f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_OBJECT 8928f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_BOOLEAN 8929f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_BYTE 8930f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_CHAR 8931f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_SHORT 8932f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET 8933f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_WIDE 8934f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_OBJECT 8935f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_BOOLEAN 8936f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_BYTE 8937f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_CHAR 8938f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_SHORT 8939f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT 8940f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_WIDE 8941f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_OBJECT 8942f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_BOOLEAN 8943f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_BYTE 8944f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_CHAR 8945f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_SHORT 8946f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET 8947f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_WIDE 8948f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_OBJECT 8949f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_BOOLEAN 8950f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_BYTE 8951f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_CHAR 8952f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_SHORT 8953f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT 8954f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_WIDE 8955f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_OBJECT 8956f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_BOOLEAN 8957f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_BYTE 8958f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_CHAR 8959f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_SHORT 8960f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_VIRTUAL 8961f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_SUPER 8962f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_DIRECT 8963f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_STATIC 8964f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_INTERFACE 8965f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_73 8966f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_VIRTUAL_RANGE 8967f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_SUPER_RANGE 8968f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_DIRECT_RANGE 8969f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_STATIC_RANGE 8970f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_INTERFACE_RANGE 8971f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_79 8972f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_7A 8973f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEG_INT 8974f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NOT_INT 8975f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEG_LONG 8976f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NOT_LONG 8977f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEG_FLOAT 8978f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEG_DOUBLE 8979f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_LONG 8980f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_FLOAT 8981f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_DOUBLE 8982f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_LONG_TO_INT 8983f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_LONG_TO_FLOAT 8984f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_LONG_TO_DOUBLE 8985f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FLOAT_TO_INT 8986f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FLOAT_TO_LONG 8987f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FLOAT_TO_DOUBLE 8988f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DOUBLE_TO_INT 8989f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DOUBLE_TO_LONG 8990f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DOUBLE_TO_FLOAT 8991f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_BYTE 8992f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_CHAR 8993f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_SHORT 8994f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_INT 8995f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_INT 8996f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_INT 8997f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_INT 8998f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_INT 8999f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_INT 9000f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_INT 9001f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_INT 9002f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_INT 9003f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_INT 9004f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_INT 9005f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_LONG 9006f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_LONG 9007f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_LONG 9008f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_LONG 9009f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_LONG 9010f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_LONG 9011f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_LONG 9012f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_LONG 9013f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_LONG 9014f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_LONG 9015f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_LONG 9016f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_FLOAT 9017f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_FLOAT 9018f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_FLOAT 9019f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_FLOAT 9020f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_FLOAT 9021f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_DOUBLE 9022f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_DOUBLE 9023f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_DOUBLE 9024f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_DOUBLE 9025f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_DOUBLE 9026f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_INT_2ADDR 9027f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_INT_2ADDR 9028f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_INT_2ADDR 9029f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_INT_2ADDR 9030f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_INT_2ADDR 9031f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_INT_2ADDR 9032f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_INT_2ADDR 9033f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_INT_2ADDR 9034f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_INT_2ADDR 9035f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_INT_2ADDR 9036f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_INT_2ADDR 9037f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_LONG_2ADDR 9038f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_LONG_2ADDR 9039f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_LONG_2ADDR 9040f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_LONG_2ADDR 9041f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_LONG_2ADDR 9042f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_LONG_2ADDR 9043f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_LONG_2ADDR 9044f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_LONG_2ADDR 9045f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_LONG_2ADDR 9046f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_LONG_2ADDR 9047f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_LONG_2ADDR 9048f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_FLOAT_2ADDR 9049f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_FLOAT_2ADDR 9050f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_FLOAT_2ADDR 9051f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_FLOAT_2ADDR 9052f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_FLOAT_2ADDR 9053f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_DOUBLE_2ADDR 9054f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_DOUBLE_2ADDR 9055f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_DOUBLE_2ADDR 9056f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_DOUBLE_2ADDR 9057f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_DOUBLE_2ADDR 9058f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_INT_LIT16 9059f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RSUB_INT 9060f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_INT_LIT16 9061f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_INT_LIT16 9062f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_INT_LIT16 9063f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_INT_LIT16 9064f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_INT_LIT16 9065f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_INT_LIT16 9066f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_INT_LIT8 9067f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RSUB_INT_LIT8 9068f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_INT_LIT8 9069f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_INT_LIT8 9070f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_INT_LIT8 9071f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_INT_LIT8 9072f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_INT_LIT8 9073f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_INT_LIT8 9074f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_INT_LIT8 9075f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_INT_LIT8 9076f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_INT_LIT8 9077f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_VOLATILE 9078f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_VOLATILE 9079f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_VOLATILE 9080f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_VOLATILE 9081f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_OBJECT_VOLATILE 9082f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_WIDE_VOLATILE 9083f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_WIDE_VOLATILE 9084f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_WIDE_VOLATILE 9085f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_WIDE_VOLATILE 9086f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_BREAKPOINT 9087f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_THROW_VERIFICATION_ERROR 9088f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_EXECUTE_INLINE 9089f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_EXECUTE_INLINE_RANGE 9090f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_DIRECT_EMPTY 9091f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN_VOID_BARRIER 9092f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_QUICK 9093f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_WIDE_QUICK 9094f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_OBJECT_QUICK 9095f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_QUICK 9096f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_WIDE_QUICK 9097f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_OBJECT_QUICK 9098f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_VIRTUAL_QUICK 9099f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_VIRTUAL_QUICK_RANGE 9100f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_SUPER_QUICK 9101f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_SUPER_QUICK_RANGE 9102f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_OBJECT_VOLATILE 9103f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_OBJECT_VOLATILE 9104f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_OBJECT_VOLATILE 910590f15431b24a4004fab2db70f273155fcd1c42a4Dan Bornstein.long .L_OP_DISPATCH_FF 9106f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 9107f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 9108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/footer.S */ 9109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 9111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 9113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 9114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 9115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 9119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 9120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 9122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 9123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common subroutines and data. 9126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 91287520ee7ff226e12e06818561b15741d2575072e3buzbee#if defined(WITH_JIT) 91297520ee7ff226e12e06818561b15741d2575072e3buzbee/* 91307520ee7ff226e12e06818561b15741d2575072e3buzbee * Placeholder entries for x86 JIT 91317520ee7ff226e12e06818561b15741d2575072e3buzbee */ 91327520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpPunt 91337520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpPunt: 91347520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpSingleStep 91357520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpSingleStep: 91367520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpNoChainNoProfile 91377520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpNoChainNoProfile: 91387520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpTraceSelectNoChain 91397520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpTraceSelectNoChain: 91407520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpTraceSelect 91417520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpTraceSelect: 91427520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpBackwardBranch 91437520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpBackwardBranch: 91447520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpNormal 91457520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpNormal: 91467520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpNoChain 91477520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpNoChain: 91487520ee7ff226e12e06818561b15741d2575072e3buzbee jmp common_abort 91497520ee7ff226e12e06818561b15741d2575072e3buzbee#endif 91507520ee7ff226e12e06818561b15741d2575072e3buzbee 9151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code when a backwards branch is taken 9153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9155f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * ebx (a.k.a. rINST) -> PC adjustment in 16-bit words 9156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_backwardBranch: 9158f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 9159c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch call common_periodicChecks # Note: expects rPC to be preserved 9160f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED rINST 9161f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 9162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 9163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9164c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9165c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9166c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch/* 9167c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Common code for method invocation with range. 9168c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * 9169c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * On entry: 9170c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * eax = Method* methodToCall 9171f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINSTw trashed, must reload 9172c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 9173c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9174c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodRange: 9175c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewRange: 9176c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9177c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 9178c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * prepare to copy args to "outs" area of current frame 9179c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 9180c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9181f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC),rINST # rINST<- AA 9182c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl 4(rPC), %ecx # %ecx<- CCCC 9183f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVEAREA_FROM_FP %edx # %edx<- &StackSaveArea 9184f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee test rINST, rINST 9185f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- AA 9186c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jz .LinvokeArgsDone # no args; jump to args done 9187c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9188c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9189c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 9190c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, %ecx=CCCC, LOCAL0_OFFSET(%ebp)=count, %edx=&outs (&stackSaveArea) 9191c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * (very few methods have > 10 args; could unroll for common cases) 9192c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 9193c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9194c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ebx, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- save %ebx 9195c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea (rFP, %ecx, 4), %ecx # %ecx<- &vCCCC 9196c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shll $2, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- offset 9197c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl LOCAL0_OFFSET(%ebp), %edx # %edx<- update &outs 9198c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shrl $2, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- offset 9199c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1: 9200c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (%ecx), %ebx # %ebx<- vCCCC 9201c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%ecx), %ecx # %ecx<- &vCCCC++ 9202c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl $1, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET<- LOCAL0_OFFSET-- 9203c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ebx, (%edx) # *outs<- vCCCC 9204c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%edx), %edx # outs++ 9205c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne 1b # loop if count (LOCAL0_OFFSET(%ebp)) not zero 9206c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ebx # %ebx<- restore %ebx 9207c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp .LinvokeArgsDone # continue 9208c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9209c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 9210c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax is "Method* methodToCall", the method we're trying to call 9211c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * prepare to copy args to "outs" area of current frame 9212c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 9213c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9214c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodNoRange: 9215c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewNoRange: 9216f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC),rINST # rINST<- BA 9217f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- BA 9218c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shrl $4, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- B 9219c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je .LinvokeArgsDone # no args; jump to args done 9220c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl 4(rPC), %ecx # %ecx<- GFED 9221f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVEAREA_FROM_FP %edx # %edx<- &StackSaveArea 9222c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9223c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 9224c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, %ecx=GFED, LOCAL0_OFFSET(%ebp)=count, %edx=outs 9225c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 9226c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9227c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNonRange: 9228c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $2, LOCAL0_OFFSET(%ebp) # compare LOCAL0_OFFSET(%ebp) to 2 9229c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- GFED 9230c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl 1f # handle 1 arg 9231c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je 2f # handle 2 args 9232c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $4, LOCAL0_OFFSET(%ebp) # compare LOCAL0_OFFSET(%ebp) to 4 9233c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl 3f # handle 3 args 9234c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je 4f # handle 4 args 9235c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch5: 9236f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl $15, rINST # rINSTw<- A 9237c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 9238f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (rFP, rINST, 4), %ecx # %ecx<- vA 9239c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vA 9240c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 9241c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch4: 9242c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $12, %ecx # %ecx<- G 9243c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 9244c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vG 9245c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vG 9246c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 9247c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch3: 9248c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x0f00, %ecx # %ecx<- 0F00 9249c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $8, %ecx # %ecx<- F 9250c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 9251c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vF 9252c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vF 9253c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 9254c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch2: 9255c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x00f0, %ecx # %ecx<- 00E0 9256c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $4, %ecx # %ecx<- E 9257c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 9258c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vE 9259c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vE 9260c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 9261c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1: 9262c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x000f, %ecx # %ecx<- 000D 9263c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vD 9264c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, -4(%edx) # *--outs<- vD 9265c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch0: 9266c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9267c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 9268c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax is "Method* methodToCall", the method we're trying to call 9269c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * find space for the new stack frame, check for overflow 9270c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 9271c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9272c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeArgsDone: 9273c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl offMethod_registersSize(%eax), %edx # %edx<- methodToCall->regsSize 9274c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl offMethod_outsSize(%eax), %ecx # %ecx<- methodToCall->outsSize 9275c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET<- methodToCall 9276c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shl $2, %edx # %edx<- update offset 9277f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVEAREA_FROM_FP %eax # %eax<- &StackSaveArea 9278c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl %edx, %eax # %eax<- newFP; (old savearea - regsSize) 9279f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%edx # %edx<- pMterpGlue 9280c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- &outs 9281c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl $sizeofStackSaveArea, %eax # %eax<- newSaveArea (stack save area using newFP) 9282c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_interpStackEnd(%edx), %edx # %edx<- glue->interpStackEnd 9283c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, LOCAL2_OFFSET(%ebp) # LOCAL2_OFFSET<- glue->interpStackEnd 9284c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shl $2, %ecx # %ecx<- update offset for outsSize 9285c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, %edx # %edx<- newSaveArea 9286c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch sub %ecx, %eax # %eax<- bottom; (newSaveArea - outsSize) 9287c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp LOCAL2_OFFSET(%ebp), %eax # compare interpStackEnd and bottom 9288c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL0_OFFSET(%ebp), %eax # %eax<- restore methodToCall 9289c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl .LstackOverflow # handle frame overflow 9290c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9291c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 9292c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * set up newSaveArea 9293c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 9294c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9295c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#ifdef EASY_GDB 9296f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVEAREA_FROM_FP %ecx # %ecx<- &StackSaveArea 9297c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, offStackSaveArea_prevSave(%edx) # newSaveArea->prevSave<- &outs 9298c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#endif 9299c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offStackSaveArea_prevFrame(%edx) # newSaveArea->prevFrame<- rFP 9300f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rPC, offStackSaveArea_savedPc(%edx) # newSaveArea->savedPc<- rPC 9301c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch testl $ACC_NATIVE, offMethod_accessFlags(%eax) # check for native call 9302c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, offStackSaveArea_method(%edx) # newSaveArea->method<- method to call 9303c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne .LinvokeNative # handle native call 9304c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9305c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 9306c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Update "glue" values for the new method 9307c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFp 9308c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 9309c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9310c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offMethod_clazz(%eax), %edx # %edx<- method->clazz 9311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx # %ecx<- pMterpGlue 9312c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offClassObject_pDvmDex(%edx), %edx # %edx<- method->clazz->pDvmDex 9313c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, offGlue_method(%ecx) # glue->method<- methodToCall 9314c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, offGlue_methodClassDex(%ecx) # glue->methodClassDex<- method->clazz->pDvmDex 9315c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offMethod_insns(%eax), rPC # rPC<- methodToCall->insns 9316c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%ecx), %eax # %eax<- glue->self 9317c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), rFP # rFP<- newFP 9318c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offThread_curFrame(%eax) # glue->self->curFrame<- newFP 9319f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 9320c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GOTO_NEXT # jump to methodToCall->insns 9321c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9322c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 9323c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Prep for the native call 9324c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFP, %edx=newSaveArea 9325c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 9326c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9327c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNative: 9328f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx # %ecx<- pMterpGlue 93294570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin movl %eax, OUT_ARG2(%esp) # push parameter methodToCall 9330c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%ecx), %ecx # %ecx<- glue->self 9331d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl offThread_jniLocal_topCookie(%ecx), %eax # %eax<- self->localRef->... 9332d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl %eax, offStackSaveArea_localRefCookie(%edx) # newSaveArea->localRefCookie<- top 93334570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin movl %edx, LOCAL3_OFFSET(%ebp) # save newSaveArea 9334c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %edx # %edx<- newFP 9335c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, offThread_curFrame(%ecx) # glue->self->curFrame<- newFP 93364570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin movl %ecx, OUT_ARG3(%esp) # push parameter glue->self 9337f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx # %ecx<- pMterpGlue 93384570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin movl OUT_ARG2(%esp), %eax # %eax<- methodToCall 9339c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea offGlue_retval(%ecx), %ecx # %ecx<- &retval 93404570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin movl %ecx, OUT_ARG1(%esp) # push parameter &retval 93414570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin movl %edx, OUT_ARG0(%esp) # push parameter newFP 9342c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9343c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch call *offMethod_nativeFunc(%eax) # call methodToCall->nativeFunc 93444570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin 93454570ad0a7706d3338d58bd0204e102719e4d68fbEugene Surovegin movl LOCAL3_OFFSET(%ebp), %ecx # %ecx<- newSaveArea 9346c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG3(%esp), %eax # %eax<- glue->self 9347d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl offStackSaveArea_localRefCookie(%ecx), %edx # %edx<- old top 9348c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $0, offThread_exception(%eax) # check for exception 9349c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offThread_curFrame(%eax) # glue->self->curFrame<- rFP 9350d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl %edx, offThread_jniLocal_topCookie(%eax) # new top <- old top 9351c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_exceptionThrown # handle exception 9352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 9353f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 9354f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx # jump to next instruction 9355c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 93566ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden.LstackOverflow: # eax=methodToCall 93576ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden movl %eax, OUT_ARG1(%esp) # push parameter methodToCall 9358f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%eax # %eax<- pMterpGlue 9359c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offGlue_self(%eax), %eax # %eax<- glue->self 9360c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, OUT_ARG0(%esp) # push parameter self 93616ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden call dvmHandleStackOverflow # call: (Thread* self, Method* meth) 9362c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_exceptionThrown # handle exception 9363c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9364c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 9365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Do we need the thread to be suspended or have debugger/profiling activity? 9367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 9369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ebx -> PC adjustment in 16-bit words (must be preserved) 9370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx -> GLUE pointer 9371f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee * reentry type, e.g. kInterpEntryInstr stored in rGLUE->entryPoint 9372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9373f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Note: A call will normally kill %eax and %ecx. To 9374f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * streamline the normal case, this routine will preserve 9375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * %ecx in addition to the normal caller save regs. The save/restore 9376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is a bit ugly, but will happen in the relatively uncommon path. 9377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: Basic-block style Jit will need a hook here as well. Fold it into 9378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the suspendCount check so we can get both in 1 shot. 9379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_periodicChecks: 9381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_pSelfSuspendCount(%ecx),%eax # eax <- &suspendCount 9382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,(%eax) 9383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 9384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9385f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee6: 9386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_pDebuggerActive(%ecx),%eax # eax <- &DebuggerActive 9387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_pActiveProfilers(%ecx),%ecx # ecx <- &ActiveProfilers 9388f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee testl %eax,%eax # debugger enabled? 9389f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee je 2f 9390f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee movzbl (%eax),%eax # get active count 9391f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee2: 9392f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee orl (%ecx),%eax # eax <- debuggerActive | activeProfilers 9393f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx # restore rGLUE 9394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 3f # one or both active - switch interp 9395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9396f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee5: 9397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ret 9398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Check for suspend */ 9400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 9401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point, the return pointer to the caller of 9402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * common_periodicChecks is on the top of stack. We need to preserve 9403f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * GLUE(ecx). 9404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The outgoing profile is: 9405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bool dvmCheckSuspendPending(Thread* self) 9406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Because we reached here via a call, go ahead and build a new frame. 9407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9408f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # need for precise GC 9409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%eax # eax<- glue->self 9410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebp 9411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %esp,%ebp 9412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl $24,%esp 9413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 9414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmCheckSuspendPending 9415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl $24,%esp 9416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %ebp 9417f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 9418f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee 9419f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee /* 9420f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee * Need to check to see if debugger or profiler flags got set 9421f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee * while we were suspended. 9422f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee */ 94230d615c3ce5bf97ae65b9347ee77968f38620d5e8Andy McFadden jmp 6b 9424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Switch interpreters */ 9426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Note: %ebx contains the 16-bit word offset to be applied to rPC to 9427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "complete" the interpretation of backwards branches. In effect, we 9428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * are completing the interpretation of the branch instruction here, 9429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and the new interpreter will resume interpretation at the branch 9430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * target. However, a switch request recognized during the handling 9431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * of a return from method instruction results in an immediate abort, 9432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and the new interpreter will resume by re-interpreting the return 9433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction. 9434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: 9436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ebx,2),rPC # adjust pc to show target 9437f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx # bail expect GLUE already loaded 9438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $1,rINST # set changeInterp to true 9439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_gotoBail 9440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for handling a return instruction 9444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_returnFromMethod: 9446f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 9447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Set entry mode in case we bail */ 9448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $kInterpEntryReturn,offGlue_entryPoint(%ecx) 9449f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee xorl rINST,rINST # zero offset in case we switch interps 9450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call common_periodicChecks # Note: expects %ecx to be preserved 9451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVEAREA_FROM_FP %eax # eax<- saveArea (old) 9453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStackSaveArea_prevFrame(%eax),rFP # rFP<- prevFrame 9454f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (offStackSaveArea_method-sizeofStackSaveArea)(rFP),rINST 9455f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,rINST # break? 9456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_gotoBail # break frame, bail out completely 9457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStackSaveArea_savedPc(%eax),rPC # pc<- saveArea->savedPC 9459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offGlue_self(%ecx),%eax # eax<- self 9460f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,offGlue_method(%ecx) # glue->method = newSave->meethod 9461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rFP,offThread_curFrame(%eax) # self->curFrame = fp 9462f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(rINST),%eax # eax<- method->clazz 9463f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 9464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_pDvmDex(%eax),%eax # eax<- method->clazz->pDvmDex 9465f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 9466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offGlue_methodClassDex(%ecx) 9467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* not bailing - restore entry mode to default */ 9468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $kInterpEntryInstr,offGlue_entryPoint(%ecx) 9469f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 9470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Prepare to strip the current frame and "longjump" back to caller of 9473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * dvmMterpStdRun. 9474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on entry: 9476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds changeInterp 9477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ecx holds glue pointer 9478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected profile: dvmMterpStdBail(MterpGlue *glue, bool changeInterp) 9480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_gotoBail: 9482f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rPC,offGlue_pc(%ecx) # export state to glue 9483f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rFP,offGlue_fp(%ecx) 9484f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %ecx,OUT_ARG0(%esp) # glue in arg0 9485f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,OUT_ARG1(%esp) # changeInterp in arg1 9486f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmMterpStdBail # bail out.... 9487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * After returning from a "glued" function, pull out the updated values 9491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and start executing at the next instruction. 9492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project common_resumeAfterGlueCall: 9494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee LOAD_PC_FP_FROM_GLUE 9495f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 9496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 9497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Integer divide or mod by zero 9500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errDivideByZero: 9502f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 9503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrArithmeticException,%eax 9504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 9505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrDivideByZero,%eax 9506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 9507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 9508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 9509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size. 9512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNegativeArraySize: 9514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 9515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNegativeArraySizeException,%eax 9516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 9517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 9518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 9519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 9520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 9521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size. 9524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNoSuchMethod: 9526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9527f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 9528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNoSuchMethodError,%eax 9529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 9530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 9531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 9532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 9533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 9534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Hit a null object when we weren't expecting one. Export the PC, throw a 9537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * NullPointerException and goto the exception processing code. 9538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNullObject: 9540f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 9541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNullPointerException,%eax 9542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 9543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 9544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 9545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 9546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 9547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array index exceeds max. 95503e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee * On entry: 95513e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee * eax <- array object 95523e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee * ecx <- index 9553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayIndex: 9555f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 95563e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee movl offArrayObject_length(%eax), %eax 95573e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee movl %ecx,OUT_ARG0(%esp) 9558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 95593e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee call dvmThrowAIOOBE # dvmThrowAIOO(index, length) 9560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 9561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Somebody has thrown an exception. Handle it. 9564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the exception processing code returns to us (instead of falling 9566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out of the interpreter), continue with whatever the next instruction 9567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * now happens to be. 9568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This does not return. 9570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_exceptionThrown: 9572f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rGLUE,%ecx 9573f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rPC,offGlue_pc(%ecx) 9574f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rFP,offGlue_fp(%ecx) 9575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 9576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmMterp_exceptionThrown 9577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_resumeAfterGlueCall 9578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_abort: 9580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xdeadf00d,%eax 9581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call *%eax 9582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Strings 9586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .section .rodata 9589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNullPointerException: 9590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NullPointerException;" 9591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArithmeticException: 9592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArithmeticException;" 9593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrDivideByZero: 9594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "divide by zero" 9595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNegativeArraySizeException: 9596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NegativeArraySizeException;" 9597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInstantiationError: 9598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InstantiationError;" 9599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNoSuchMethodError: 9600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NoSuchMethodError;" 9601f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LstrInternalErrorA: 9602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InternalError;" 9603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LstrFilledNewArrayNotImplA: 9604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "filled-new-array only implemented for 'int'" 9605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9606