InterpAsm-x86.S revision 9f601a917c8878204482c37aec7005054b6776fa
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This file was generated automatically by gen-mterp.py for 'x86'. 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * --> DO NOT EDIT <-- 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/header.S */ 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit x86 definitions and declarations. 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project386 ABI general notes: 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectCaller save set: 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project eax, edx, ecx, st(0)-st(7) 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectCallee save set: 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ebx, esi, edi, ebp 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectReturn regs: 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 32-bit in eax 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 64-bit in edx:eax (low-order 32 in eax) 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fp on top of fp stack st(0) 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectParameters passed on stack, pushed right-to-left. On entry to target, first 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectparm is at 4(%esp). Traditional entry code is: 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectfunctEntry: 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebp # save old frame pointer 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov %ebp,%esp # establish new frame pointer 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sub FrameSize,%esp # Allocate storage for spill, locals & outs 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOnce past the prologue, arguments are referenced at ((argno + 2)*4)(%ebp) 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectAlignment of stack not strictly required, but should be for performance. We'll 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectalign frame sizes to 16-byte multiples. 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectIf we're not doing variable stack allocation (alloca), the frame pointer can be 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecteliminated and all arg references adjusted to be esp relative. 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectMterp notes: 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectSome key interpreter variables will be assigned to registers. Note that each 58dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbeewill also have an associated spill location (mostly useful for those assigned 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectto callee save registers). 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project nick reg purpose 62f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee rPC edi interpreted program counter, used for fetching instructions 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rFP esi interpreted frame pointer, used for accessing locals and args 64f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee rINSTw bx first 16-bit code of current instruction 65f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee rINSTbl bl opcode portion of instruction word 66f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee rINSTbh bh high byte of inst word, usually contains src/tgt reg names 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectNotes: 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project o High order 16 bits of ebx must be zero on entry to handler 70f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee o rPC, rFP, rINSTw/rINSTbl valid on handler entry and exit 71f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee o eax, edx and ecx are scratch, rINSTw/ebx sometimes scratch 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 759f601a917c8878204482c37aec7005054b6776fabuzbee#define rSELF (%ebp) 76f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rPC %esi 77f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rFP %edi 78f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINST %ebx 79f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINSTw %bx 80f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINSTbh %bh 81f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rINSTbl %bl 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Frame diagram while executing dvmMterpStdRun, high to low addresses */ 85f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define IN_ARG0 ( 12) 86f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define CALLER_RP ( 8) 87f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define PREV_FP ( 4) 889f601a917c8878204482c37aec7005054b6776fabuzbee#define rSELF_SPILL ( 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) 92f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define EBX_SPILL (-12) /* <- esp following dmMterpStdRun header */ 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) 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Out Arg offsets, relative to %sp */ 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 */ 109f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define FRAME_SIZE 80 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 120dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#if defined(WITH_JIT) 1219f601a917c8878204482c37aec7005054b6776fabuzbee.macro GET_JIT_PROF_TABLE _self _reg 1229f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_pJitProfTable(\_self),\_reg 123dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee.endm 1249f601a917c8878204482c37aec7005054b6776fabuzbee.macro GET_JIT_THRESHOLD _self _reg 1259f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_jitThreshold(\_self),\_reg 126dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee.endm 127dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#endif 128dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee 1299f601a917c8878204482c37aec7005054b6776fabuzbee/* save/restore the PC and/or FP from the self struct */ 1309f601a917c8878204482c37aec7005054b6776fabuzbee.macro SAVE_PC_FP_TO_SELF _reg 1319f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,\_reg 1329f601a917c8878204482c37aec7005054b6776fabuzbee movl rPC,offThread_pc(\_reg) 1339f601a917c8878204482c37aec7005054b6776fabuzbee movl rFP,offThread_fp(\_reg) 134f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1369f601a917c8878204482c37aec7005054b6776fabuzbee.macro LOAD_PC_FP_FROM_SELF 1379f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,rFP 1389f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_pc(rFP),rPC 1399f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_fp(rFP),rFP 140f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* The interpreter assumes a properly aligned stack on entry, and 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * will preserve 16-byte alignment. 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "export" the PC to the interpreted stack frame, f/b/o future exception 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * objects. Must * be done *before* something calls dvmThrowException. 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "SAVEAREA_FROM_FP(fp)->xtra.currentPc = pc", i.e. 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fp - sizeof(StackSaveArea) + offsetof(SaveArea, xtra.currentPc) 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * It's okay to do this more than once. 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 155f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro EXPORT_PC 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl rPC, (-sizeofStackSaveArea + offStackSaveArea_currentPc)(rFP) 157f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Given a frame pointer, find the stack save area. 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In C this is "((StackSaveArea*)(_fp) -1)". 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 164f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro SAVEAREA_FROM_FP _reg 165f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal -sizeofStackSaveArea(rFP), \_reg 166f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 169f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the next instruction from rPC into rINSTw. Does not advance rPC. 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 171f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST 172f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl (rPC),rINST 173f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 176f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the opcode byte and zero-extend it into _reg. Must be used 177f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * in conjunction with GOTO_NEXT_R 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 179f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST_R _reg 180f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (rPC),\_reg 181f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 184f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the opcode byte at _count words offset from rPC and zero-extend 185f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * it into _reg. Must be used in conjunction with GOTO_NEXT_R 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 187f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST_OPCODE _count _reg 188f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl \_count*2(rPC),\_reg 189f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 192f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the nth instruction word from rPC into rINSTw. Does not advance 193f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rPC, and _count is in words 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 195f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST_WORD _count 196f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl \_count*2(rPC),rINST 197f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 200f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch instruction word indexed (used for branching). 201f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Index is in instruction word units. 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 203f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro FETCH_INST_INDEXED _reg 204f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl (rPC,\_reg,2),rINST 205f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 208f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Advance rPC by instruction count 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 210f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro ADVANCE_PC _count 211f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal 2*\_count(rPC),rPC 212f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 215f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Advance rPC by branch offset in register 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 217f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro ADVANCE_PC_INDEXED _reg 218f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rPC,\_reg,2),rPC 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 220f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.macro GOTO_NEXT 222f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%eax 223f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbh,rINST 224f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,%eax,4) 225f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 226f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 227f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 228f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Version of GOTO_NEXT that assumes _reg preloaded with opcode. 229f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Should be paired with FETCH_INST_R 230f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 231f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro GOTO_NEXT_R _reg 232f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC),rINST 233f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_reg,4) 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.endm 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 23771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo version of GOTO_NEXT that assumes _reg preloaded with table 23871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * offset of the jumbo instruction, which is the top half of the extended 23971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * opcode + 0x100. Loads rINST with BBBB field, similar to GOTO_NEXT_R 24071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 24171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.macro GOTO_NEXT_JUMBO_R _reg 24271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 6(rPC),rINST 24371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp *dvmAsmInstructionJmpTable(,\_reg,4) 24471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.endm 24571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get/set the 32-bit value from a Dalvik register. 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 249f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro GET_VREG_R _reg _vreg 250f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (rFP,\_vreg,4),\_reg 251f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 252f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 253f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro SET_VREG _reg _vreg 254f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl \_reg,(rFP,\_vreg,4) 255f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 256f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 257f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro GET_VREG_WORD _reg _vreg _offset 258f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4*(\_offset)(rFP,\_vreg,4),\_reg 259f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 260f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 261f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.macro SET_VREG_WORD _reg _vreg _offset 262f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl \_reg,4*(\_offset)(rFP,\_vreg,4) 263f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.endm 264f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 265f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#if 1 266f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 267f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define rFinish %edx 268f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 269f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/* Macros for x86-atom handlers */ 270f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 271f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Get the 32-bit value from a dalvik register. 272f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 273f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 274f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro GET_VREG _vreg 275f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (rFP,\_vreg, 4), \_vreg 276f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 277f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 278f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 279f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the next instruction from the specified offset. Advances rPC 280f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * to point to the next instruction. "_count" is in 16-bit code units. 281f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * 282f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * This must come AFTER anything that can throw an exception, or the 283f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * exception catch may miss. (This also implies that it must come after 284f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * EXPORT_PC()) 285f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 286f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 287f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH_ADVANCE_INST _count 288f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee add $(\_count*2), rPC 289f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl (rPC), rINST 290f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 291f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 292f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 293f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the next instruction from an offset specified by _reg. Updates 294f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rPC to point to the next instruction. "_reg" must specify the distance 295f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * in bytes, *not* 16-bit code units, and may be a signed value. 296f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 297f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 298f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH_ADVANCE_INST_RB _reg 299f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl \_reg, rPC 300f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl (rPC), rINST 301f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 302f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 303f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 304f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch a half-word code unit from an offset past the current PC. The 305f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * "_count" value is in 16-bit code units. Does not advance rPC. 306f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * For example, given instruction of format: AA|op BBBB, it 307f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * fetches BBBB. 308f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 309f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 310f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH _count _reg 311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl (\_count*2)(rPC), \_reg 312f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 313f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 314f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 315f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch a half-word code unit from an offset past the current PC. The 316f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * "_count" value is in 16-bit code units. Does not advance rPC. 317f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * This variant treats the value as signed. 318f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 319f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 320f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCHs _count _reg 321f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl (\_count*2)(rPC), \_reg 322f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 323f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 324f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 325f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the first byte from an offset past the current PC. The 326f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * "_count" value is in 16-bit code units. Does not advance rPC. 327f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * For example, given instruction of format: AA|op CC|BB, it 328f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * fetches BB. 329f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 330f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 331f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH_BB _count _reg 332f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2)(rPC), \_reg 333f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 334f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 335f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 336f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the second byte from an offset past the current PC. The 337f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * "_count" value is in 16-bit code units. Does not advance rPC. 338f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * For example, given instruction of format: AA|op CC|BB, it 339f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * fetches CC. 340f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 341f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 342f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH_CC _count _reg 343f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2 + 1)(rPC), \_reg 344f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 345f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 346f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 347f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch the second byte from an offset past the current PC. The 348f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * "_count" value is in 16-bit code units. Does not advance rPC. 349f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * This variant treats the value as signed. 350f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 351f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH_CCs _count _reg 353f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movsbl (\_count*2 + 1)(rPC), \_reg 354f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 355f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 356f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 357f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 358f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Fetch one byte from an offset past the current PC. Pass in the same 359f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * "_count" as you would for FETCH, and an additional 0/1 indicating which 360f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * byte of the halfword you want (lo/hi). 361f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 362f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 363f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FETCH_B _reg _count _byte 364f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2+\_byte)(rPC), \_reg 365f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 366f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 367f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 368f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Put the instruction's opcode field into the specified register. 369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 370f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro GET_INST_OPCODE _reg 372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl, \_reg 373f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 374f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 375f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 376f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Begin executing the opcode in _reg. 377f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 378f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 379f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro GOTO_OPCODE _reg 380f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shl $6, \_reg 381f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $dvmAsmInstructionStart,\_reg 382f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *\_reg 383f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 384f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 385f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 386f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 387f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Macros pair attempts to speed up FETCH_INST, GET_INST_OPCODE and GOTO_OPCODE 389f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * by using a jump table. _rFinish should must be the same register for 390f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * both macros. 391f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 392f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 393f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FFETCH _rFinish 394f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (rPC), \_rFinish 395f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FGETOP_JMPa _rFinish 398f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC), rINST 399f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_rFinish, 4) 400f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 401f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 402f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 403f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Macro pair attempts to speed up FETCH_INST, GET_INST_OPCODE and GOTO_OPCODE 404f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * by using a jump table. _rFinish and _count should must be the same register for 405f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * both macros. 406f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 407f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 408f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FFETCH_ADV _count _rFinish 409f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2)(rPC), \_rFinish 410f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 411f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 412f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FGETOP_JMP _count _rFinish 413f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2 + 1)(rPC), rINST 414f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $(\_count*2), rPC 415f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_rFinish, 4) 416f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 417f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 418f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FGETOP_JMP2 _rFinish 419f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC), rINST 420f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_rFinish, 4) 421f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 422f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 423f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_1 _count _rFinish 424f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2)(rPC), \_rFinish 425f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shl $6, \_rFinish 426f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 427f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 428f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_2 _rFinish 429f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $dvmAsmInstructionStart,\_rFinish 430f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 431f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 432f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_3 _count 433f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $(\_count*2), rPC 434f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 435f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 436f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_4 _rFinish 437f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC), rINST 438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *\_rFinish 439f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 440f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 441f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_A_1 _reg _rFinish 442f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (rPC, \_reg), \_rFinish 443f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shl $6, \_rFinish 444f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 445f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 446f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_A_2 _rFinish 447f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $dvmAsmInstructionStart,\_rFinish 448f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 449f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 450f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro OLD_JMP_A_3 _reg _rFinish 451f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl \_reg, rPC 452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC, \_reg), rINST 453f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *\_rFinish 454f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 455f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 456f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 457f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Macro pair attempts to speed up FETCH_INST, GET_INST_OPCODE and GOTO_OPCODE 458f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * by using a jump table. _rFinish and _reg should must be the same register for 459f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * both macros. 460f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 461f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 462f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FFETCH_ADV_RB _reg _rFinish 463f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_reg, rPC), \_rFinish 464f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 465f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 466f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FGETOP_RB_JMP _reg _rFinish 467f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(\_reg, rPC), rINST 468f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl \_reg, rPC 469f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_rFinish, 4) 470f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 472f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 473f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up FETCH_INST, GET_INST_OPCODE using 474f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * a jump table. This macro should be called before FINISH_JMP where 475f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rFinish should be the same register containing the opcode value. 476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * This is an attempt to split up FINISH in order to reduce or remove 477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * potential stalls due to the wait for rFINISH. 478f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 479f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 480f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH_FETCH _rFinish 481f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (rPC), \_rFinish 482f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC), rINST 483f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 484f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 485f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 486f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 487f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up FETCH_ADVANCE_INST, GET_INST_OPCODE using 488f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * a jump table. This macro should be called before FINISH_JMP where 489f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rFinish should be the same register containing the opcode value. 490f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * This is an attempt to split up FINISH in order to reduce or remove 491f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * potential stalls due to the wait for rFINISH. 492f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 493f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH_FETCH_ADVANCE _count _rFinish 495f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2)(rPC), \_rFinish 496f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2 + 1)(rPC), rINST 497f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $(\_count*2), rPC 498f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 499f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 500f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 501f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up FETCH_ADVANCE_INST_RB, GET_INST_OPCODE using 502f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * a jump table. This macro should be called before FINISH_JMP where 503f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rFinish should be the same register containing the opcode value. 504f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * This is an attempt to split up FINISH in order to reduce or remove 505f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * potential stalls due to the wait for rFINISH. 506f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 507f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 508f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH_FETCH_ADVANCE_RB _reg _rFinish 509f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_reg, rPC), \_rFinish 510f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(\_reg, rPC), rINST 511f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl \_reg, rPC 512f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 513f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 515f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up GOTO_OPCODE using a jump table. This macro should 516f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * be called after a FINISH_FETCH* instruction where rFinish should be the 517f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * same register containing the opcode value. This is an attempt to split up 518f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * FINISH in order to reduce or remove potential stalls due to the wait for rFINISH. 519f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 520f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 521f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH_JMP _rFinish 522f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_rFinish, 4) 523f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 524f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 525f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 526f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up FETCH_INST, GET_INST_OPCODE, GOTO_OPCODE by using 527f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * a jump table. Uses a single macro - but it should be faster if we 528f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * split up the fetch for rFinish and the jump using rFinish. 529f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 530f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 531f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH_A 532f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (rPC), rFinish 533f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC), rINST 534f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,rFinish, 4) 535f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 536f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 537f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 538f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up FETCH_ADVANCE_INST, GET_INST_OPCODE, 539f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * GOTO_OPCODE by using a jump table. Uses a single macro - 540f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * but it should be faster if we split up the fetch for rFinish 541f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * and the jump using rFinish. 542f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 543f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 544f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH _count 545f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2)(rPC), rFinish 546f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_count*2 + 1)(rPC), rINST 547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $(\_count*2), rPC 548f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,rFinish, 4) 549f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 550f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 551f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 552f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Attempts to speed up FETCH_ADVANCE_INST_RB, GET_INST_OPCODE, 553f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * GOTO_OPCODE by using a jump table. Uses a single macro - 554f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * but it should be faster if we split up the fetch for rFinish 555f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * and the jump using rFinish. 556f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 557f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 558f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .macro FINISH_RB _reg _rFinish 559f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl (\_reg, rPC), \_rFinish 560f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(\_reg, rPC), rINST 561f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl \_reg, rPC 562f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jmp *dvmAsmInstructionJmpTable(,\_rFinish, 4) 563f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .endm 564f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 565f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define sReg0 LOCAL0_OFFSET(%ebp) 566f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define sReg1 LOCAL1_OFFSET(%ebp) 567f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define sReg2 LOCAL2_OFFSET(%ebp) 568f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#define sReg3 LOCAL3_OFFSET(%ebp) 569f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 570f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* 571f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Hard coded helper values. 572f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 573f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 574f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.balign 16 575f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 576f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LdoubNeg: 577f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x8000000000000000 578f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 579f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.L64bits: 580f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0xFFFFFFFFFFFFFFFF 581f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 582f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LshiftMask2: 583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x0000000000000000 584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LshiftMask: 585f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x000000000000003F 586f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 587f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.Lvalue64: 588f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x0000000000000040 589f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 590f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LvaluePosInfLong: 591f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x7FFFFFFFFFFFFFFF 592f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 593f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LvalueNegInfLong: 594f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x8000000000000000 595f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 596f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LvalueNanLong: 597f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee .quad 0x0000000000000000 598f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 599f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LintMin: 600f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long 0x80000000 601f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 602f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LintMax: 603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long 0x7FFFFFFF 604f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee#endif 605f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is a #include, not a %include, because we want the C pre-processor 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to expand the macros into assembler assignment statements. 610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "../common/asm-constants.h" 612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 613dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#if defined(WITH_JIT) 614dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#include "../common/jit-config.h" 615dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#endif 616dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee 617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmInstructionStart 619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmAsmInstructionStart, %function 620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmInstructionStart = .L_OP_NOP 621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOP: /* 0x00 */ 626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOP.S */ 627f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 628f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 629f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE: /* 0x01 */ 634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 637f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- BA 638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 639f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shrl $4,rINST # rINST<- B 640f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 641f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 642f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 643f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax # fp[A]<-fp[B] 644f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_FROM16: /* 0x02 */ 649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */ 650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 652f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%eax # eax <= AA 653f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movw 2(rPC),rINSTw # rINSTw <= BBBB 654f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST # ecx<- fp[BBBB] 655f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 656f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 657f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax # fp[AA]<- ecx] 658f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_16: /* 0x03 */ 663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_16.S */ 664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 668f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 669f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 670f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 671f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 672f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE: /* 0x04 */ 677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE.S */ 678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide vA, vB */ 679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 680f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx <- BA 681f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 682f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax rINST 0 # eax<- v[B+0] 683f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST rINST 1 # rINST<- v[B+1] 684f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 685f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 686f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD rINST %ecx 1 # v[A+1]<- rINST 687f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 688f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax %ecx 0 # v[A+0]<- eax 689f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_FROM16: /* 0x05 */ 694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE_FROM16.S */ 695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/from16 vAA, vBBBB */ 696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 698f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- AAAA 699f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST %ecx 0 # rINST<- v[BBBB+0] 700f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # ecx<- v[BBBB+1] 701f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 702f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 703f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD rINST %eax 0 # v[AAAA+0]<- rINST 704f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx %eax 1 # v[AAAA+1]<- eax 705f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_WIDE_16: /* 0x06 */ 710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_WIDE_16.S */ 711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-wide/16 vAAAA, vBBBB */ 712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */ 713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 715f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST %ecx 0 # rINSTw_WORD<- v[BBBB+0] 716f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # ecx<- v[BBBB+1] 717f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 718f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD rINST %eax 0 # v[AAAA+0]<- rINST 719f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 720f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx %eax 1 # v[AAAA+1]<- ecx 721f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT: /* 0x07 */ 726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT.S */ 727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 730f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- BA 731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 732f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shrl $4,rINST # rINST<- B 733f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 734f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 735f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 736f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax # fp[A]<-fp[B] 737f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_FROM16: /* 0x08 */ 743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_FROM16.S */ 744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_FROM16.S */ 745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/from16, move-object/from16 */ 746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBBBB */ 747f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%eax # eax <= AA 748f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movw 2(rPC),rINSTw # rINSTw <= BBBB 749f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST # ecx<- fp[BBBB] 750f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 751f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 752f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax # fp[AA]<- ecx] 753f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_OBJECT_16: /* 0x09 */ 759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_OBJECT_16.S */ 760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_16.S */ 761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move/16, move-object/16 */ 762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAAAA, vBBBB */ 763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%ecx # ecx<- BBBB 764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- AAAA 765f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 766f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 767f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 768f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 769f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT: /* 0x0a */ 775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */ 776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 7789f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax # eax<- rSELF 779f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- AA 7809f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_retval(%eax),%eax # eax<- self->retval.l 781f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 782f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 783f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # fp[AA]<- retval.l 784f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_WIDE: /* 0x0b */ 789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT_WIDE.S */ 790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-result-wide vAA */ 7919f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 7929f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_retval(%ecx),%eax 7939f601a917c8878204482c37aec7005054b6776fabuzbee movl 4+offThread_retval(%ecx),%ecx 794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 795f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[AA+0] <- eax 796f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx rINST 1 # v[AA+1] <- ecx 797f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 798f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_RESULT_OBJECT: /* 0x0c */ 803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT_OBJECT.S */ 804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_RESULT.S */ 805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for: move-result, move-result-object */ 806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 8079f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax # eax<- rSELF 808f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- AA 8099f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_retval(%eax),%eax # eax<- self->retval.l 810f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 811f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 812f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # fp[AA]<- retval.l 813f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MOVE_EXCEPTION: /* 0x0d */ 819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE_EXCEPTION.S */ 820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* move-exception vAA */ 8219f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offThread_exception(%ecx),%eax # eax<- dvmGetException bypass 823f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST # fp[AA]<- exception object 824f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 825f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,offThread_exception(%ecx) # dvmClearException bypass 827f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 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_VOID: /* 0x0e */ 832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_VOID.S */ 833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN: /* 0x0f */ 838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN.S */ 839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8409f601a917c8878204482c37aec7005054b6776fabuzbee * Return a 32-bit value. Copies the return value into the "self" 841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 8469f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 847f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 8489f601a917c8878204482c37aec7005054b6776fabuzbee movl %eax,offThread_retval(%ecx) # retval.i <- AA 849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_WIDE: /* 0x10 */ 854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_WIDE.S */ 855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8569f601a917c8878204482c37aec7005054b6776fabuzbee * Return a 64-bit value. Copies the return value into the "self" 857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* return-wide vAA */ 8609f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 861f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax rINST 0 # eax<- v[AA+0] 862f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST rINST 1 # rINST<- v[AA+1] 8639f601a917c8878204482c37aec7005054b6776fabuzbee movl %eax,offThread_retval(%ecx) 8649f601a917c8878204482c37aec7005054b6776fabuzbee movl rINST,4+offThread_retval(%ecx) 865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RETURN_OBJECT: /* 0x11 */ 870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN_OBJECT.S */ 871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RETURN.S */ 872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 8739f601a917c8878204482c37aec7005054b6776fabuzbee * Return a 32-bit value. Copies the return value into the "self" 874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * structure, then jumps to the return handler. 875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: return, return-object 877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA */ 8799f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 880f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 8819f601a917c8878204482c37aec7005054b6776fabuzbee movl %eax,offThread_retval(%ecx) # retval.i <- AA 882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_returnFromMethod 883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_4: /* 0x12 */ 888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_4.S */ 889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/4 vA, #+B */ 890f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movsx rINSTbl,%eax # eax<-ssssssBx 891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xf,%ecx 892f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %eax,%ecx # ecx<- A 893f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 894f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax 896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 897f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_16: /* 0x13 */ 902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_16.S */ 903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/16 vAA, #+BBBB */ 904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssBBBB 905f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax # eax<- AA 906f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 907f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 908f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax # vAA<- ssssBBBB 909f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST: /* 0x14 */ 914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST.S */ 915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const vAA, #+BBBBbbbb */ 916f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 2(rPC),%eax # grab all 32 bits at once 917f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%ecx # ecx<- AA 918f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 919f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 920f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # vAA<- eax 921f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_HIGH16: /* 0x15 */ 926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_HIGH16.S */ 927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/high16 vAA, #+BBBB0000 */ 928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- 0000BBBB 929f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%ecx # ecx<- AA 930f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 931f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,%eax # eax<- BBBB0000 933f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # vAA<- eax 934f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_16: /* 0x16 */ 939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_16.S */ 940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/16 vAA, #+BBBB */ 941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%eax # eax<- ssssBBBB 942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # rPC:eax<- ssssssssssssBBBB 943f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # store msw 944f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 945f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # store lsw 946f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 947f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_32: /* 0x17 */ 952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_32.S */ 953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/32 vAA, #+BBBBbbbb */ 954f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 2(rPC),%eax # eax<- BBBBbbbb 955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # rPC:eax<- ssssssssssssBBBB 956f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST,1 # store msw 957f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 958f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # store lsw 959f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 960f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE: /* 0x18 */ 965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE.S */ 966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide vAA, #+HHHHhhhhBBBBbbbb */ 967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # eax<- lsw 968f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- AA 969f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 6(rPC),rINST # rINST<- msw 970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),%ecx # dst addr 971f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,4(%ecx) 972f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 5 %edx 973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(%ecx) 974f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 5 975f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_WIDE_HIGH16: /* 0x19 */ 980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_WIDE_HIGH16.S */ 981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const-wide/high16 vAA, #+BBBB000000000000 */ 982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- 0000BBBB 983f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 984f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall $16,%eax # eax<- BBBB0000 986f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[AA+1]<- eax 987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 988f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[AA+0]<- eax 989f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING: /* 0x1a */ 994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_STRING.S */ 995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBB */ 9979f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 9999f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx# ecx<- self->methodClassDex 1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings 1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResString[BBBB] 1002f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%ecx 1003f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_STRING_resolve 1006f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # vAA<- rResString[BBBB] 1007f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1008f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_STRING_JUMBO: /* 0x1b */ 1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_STRING_JUMBO.S */ 1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBBBBBB */ 10169f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%eax # eax<- BBBBBBBB 10189f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx# ecx<- self->methodClassDex 1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings 1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResString[BBBB] 1021f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%ecx 1022f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_STRING_JUMBO_resolve 1025f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # vAA<- rResString[BBBB] 1026f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 1027f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CONST_CLASS: /* 0x1c */ 1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CONST_CLASS.S */ 1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/class vAA, Class@BBBB */ 10359f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 10379f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx# ecx<- self->methodClassDex 1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- dvmDex->pResClasses 1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResClasses[BBBB] 1040f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%ecx 1041f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CONST_CLASS_resolve 1044f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx # vAA<- rResClasses[BBBB] 1045f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1046f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_ENTER: /* 0x1d */ 1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MONITOR_ENTER.S */ 1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Synchronize on an object. 1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-enter vAA */ 10569f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1057f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 1058f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_WORD 1 1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 106001605d2b668e8e1701cfdfa302dde847b9171fc9Carl Shapiro EXPORT_PC # need for precise GC 1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_MONITOR_ENTER_continue 1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MONITOR_EXIT: /* 0x1e */ 1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MONITOR_EXIT.S */ 1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlock an object. 1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Exceptions that occur when unlocking a monitor need to appear as 1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if they happened at the following instruction. See the Dalvik 1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction spec. 1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* monitor-exit vAA */ 1076f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST 10779f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1078f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 1080668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee je .LOP_MONITOR_EXIT_errNullObject # go if so 1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MONITOR_EXIT_continue 1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CHECK_CAST: /* 0x1f */ 1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CHECK_CAST.S */ 1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if a cast from one class to another is allowed. 1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* check-cast vAA, class@BBBB */ 10939f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1094f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST,rINST # rINST<- vAA (object) 1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 10969f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 1097f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST # is oject null? 1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CHECK_CAST_okay # null obj, cast always succeeds 1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved class 1101f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offObject_clazz(rINST),%ecx # ecx<- obj->clazz 1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # have we resolved this before? 1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CHECK_CAST_resolve # no, go do it now 1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_resolved: 1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl %eax,%ecx # same class (trivial success)? 1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_CHECK_CAST_fullcheck # no, do full check 1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CHECK_CAST_okay: 1108f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1109f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1110f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INSTANCE_OF: /* 0x20 */ 1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INSTANCE_OF.S */ 1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check to see if an object reference is an instance of a class. 1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Most common situation is a non-null object, being compared against 1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an already-resolved class. 1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* instance-of vA, vB, class@CCCC */ 1123f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax # eax<- BA 1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 1125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB (obj) 11269f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # object null? 11289f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_store # null obj, not instance, store it 1130f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- CCCC 1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 1132f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%ecx,%edx,4),%ecx # ecx<- resolved class 1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- obj->clazz 1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # have we resolved this before? 1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_resolve # not resolved, do it now 1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INSTANCE_OF_resolved: # eax<- obj->clazz, ecx<- resolved class 1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl %eax,%ecx # same class (trivial success)? 1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INSTANCE_OF_trivial # yes, trivial finish 1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INSTANCE_OF_fullcheck # no, do full check 1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ARRAY_LENGTH: /* 0x21 */ 1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ARRAY_LENGTH.S */ 1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the length of an array. 1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1148f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee mov rINST,%eax # eax<- BA 1149f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1150f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST # ecx<- vB (object ref) 1151f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%al # eax<- A 1152f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # is null? 1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 1154f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_length(%ecx),%ecx 1156f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 1157f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 1158f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_INSTANCE: /* 0x22 */ 1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEW_INSTANCE.S */ 1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new instance of a class. 1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-instance vAA, class@BBBB */ 11689f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 11709f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 1172f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved class 1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # resolved? 1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_NEW_INSTANCE_resolve # no, go do it 1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_NEW_INSTANCE_resolved: # on entry, ecx<- class 1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $CLASS_INITIALIZED,offClassObject_status(%ecx) 1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_NEW_INSTANCE_initialized 1179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_NEW_INSTANCE_needinit 1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEW_ARRAY: /* 0x23 */ 1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEW_ARRAY.S */ 1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Allocate an array of objects, specified with the array class 1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and a count. 1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The verifier guarantees that this is an array class, so we don't 1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * check for it here. 1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* new-array vA, vB, class@CCCC */ 11939f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1194f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 11959f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- CCCC 1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved class 1199f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax 1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 1201f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB (array length) 1202f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_errNegativeArraySize # bail 1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_NEW_ARRAY_finish # yes, fast path 1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_NEW_ARRAY_resolve # resolve now 1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY: /* 0x24 */ 1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */ 1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 12209f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 12219f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%eax),%eax # eax<- pDvmDex 1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%eax),%eax # eax<- pDvmDex->pResClasses 1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved class 1225f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_continue # yes, continue 1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # less frequent path, so we'll redo some work 12299f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- BBBB 12329f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%eax),%eax # eax<- self->method 1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FILLED_NEW_ARRAY_more 1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILLED_NEW_ARRAY_RANGE: /* 0x25 */ 1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY_RANGE.S */ 1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILLED_NEW_ARRAY.S */ 1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Create a new array with elements filled from registers. 1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: filled-new-array, filled-new-array/range 1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, type@BBBB */ 12479f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 12489f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%eax),%eax # eax<- pDvmDex 1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResClasses(%eax),%eax # eax<- pDvmDex->pResClasses 1251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved class 1252f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 1254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_FILLED_NEW_ARRAY_RANGE_continue # yes, continue 1255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # less frequent path, so we'll redo some work 12569f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,OUT_ARG2(%esp) # arg2<- false 1258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- BBBB 12599f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%eax),%eax # eax<- self->method 1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FILLED_NEW_ARRAY_RANGE_more 1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FILL_ARRAY_DATA: /* 0x26 */ 1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FILL_ARRAY_DATA.S */ 1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* fill-array-data vAA, +BBBBBBBB */ 1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 2(rPC),%ecx # ecx<- BBBBbbbb 1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 1270f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST 1271f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandleFillArrayData 1275f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # exception thrown? 1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 1278f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 1279f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_THROW: /* 0x27 */ 1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_THROW.S */ 1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throw an exception object in the current thread. 1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* throw vAA */ 1289f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 1290f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- exception object 12919f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx # ecx<- self 1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null object? 1293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 1294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,offThread_exception(%ecx) # thread->exception<- obj 1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 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: /* 0x28 */ 1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO.S */ 1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 8-bit offset. 1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset, which we need to 1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * double to get a byte offset. 1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto +AA */ 1308f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movsbl rINSTbl,rINST # ebx<- ssssssAA 1309f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST # test for <0 1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1312f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1313f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_16: /* 0x29 */ 1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO_16.S */ 1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 16-bit offset. 1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset 1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/16 +AAAA */ 1326f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # rINST<- ssssAAAA 1327f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST # test for <0 1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1329f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1330f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1331f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_GOTO_32: /* 0x2a */ 1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_GOTO_32.S */ 1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unconditional branch, 32-bit offset. 1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The branch distance is a signed code-unit offset. 1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unlike most opcodes, this one is allowed to branch to itself, so 1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * our "backward branch" test must be "<=0" instead of "<0". 1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* goto/32 AAAAAAAA */ 1347f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 2(rPC),rINST # rINST<- AAAAAAAA 1348f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,rINST # test for <= 0 1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle common_backwardBranch 1350f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1351f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_PACKED_SWITCH: /* 0x2b */ 1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */ 1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 2(rPC),%ecx # ecx<- BBBBbbbb 1370f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 1371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 1372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %eax,OUT_ARG1(%esp) # ARG1<- vAA 1373f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %ecx,OUT_ARG0(%esp) # ARG0<- switchData 1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandlePackedSwitch 1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 1376f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %eax,rINST # set up word offset 1377f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jle common_backwardBranch # check on special actions 1378f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED rINST 1379f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPARSE_SWITCH: /* 0x2c */ 1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPARSE_SWITCH.S */ 1386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_PACKED_SWITCH.S */ 1387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a packed-switch or sparse-switch instruction. In both cases 1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * we decode it and hand it off to a helper function. 1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We don't really expect backward branches in a switch statement, but 1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they're perfectly legal, so we check for them here. 1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: packed-switch, sparse-switch 1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, +BBBB */ 1397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 2(rPC),%ecx # ecx<- BBBBbbbb 1398f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 1399f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2 1400f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %eax,OUT_ARG1(%esp) # ARG1<- vAA 1401f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %ecx,OUT_ARG0(%esp) # ARG0<- switchData 1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmInterpHandleSparseSwitch 1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 1404f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %eax,rINST # set up word offset 1405f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jle common_backwardBranch # check on special actions 1406f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED rINST 1407f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_FLOAT: /* 0x2d */ 1414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPL_FLOAT.S */ 1415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1430f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1431f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPL_FLOAT_isNaN 1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPL_FLOAT_finish 1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPL_FLOAT_finish 1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_FLOAT_finish: 1438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 1439f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1440f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_FLOAT: /* 0x2e */ 1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_FLOAT.S */ 1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1462f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1463f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPG_FLOAT_isNaN 1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPG_FLOAT_finish 1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPG_FLOAT_finish 1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_FLOAT_finish: 1470f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 1471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1472f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPL_DOUBLE: /* 0x2f */ 1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPL_DOUBLE.S */ 1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 1484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1495f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPL_DOUBLE_isNaN 1497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPL_DOUBLE_finish 1498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPL_DOUBLE_finish 1500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPL_DOUBLE_finish: 1502f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 1503f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1504f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMPG_DOUBLE: /* 0x30 */ 1510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMPG_DOUBLE.S */ 1511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double_cmp[gl] vAA, vBB, vCC */ 1512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 1513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 1515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) 1516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) 1517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 1518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) 1519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) 1520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 1521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %ecx,%ecx 1522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fucompp # z if equal, p set if NaN, c set if st0 < st1 1523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstsw %ax 1524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 1525f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1526f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp .LOP_CMPG_DOUBLE_isNaN 1528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_CMPG_DOUBLE_finish 1529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl %ecx,%ecx 1530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMPG_DOUBLE_finish 1531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project incl %ecx 1532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_CMPG_DOUBLE_finish: 1533f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax 1534f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1535f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_CMP_LONG: /* 0x31 */ 1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_CMP_LONG.S */ 1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare two 64-bit values. Puts 0, 1, or -1 into the destination 1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * register based on the results of the comparison. 1544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* cmp-long vAA, vBB, vCC */ 1546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 1547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%edx # edx<- CC 1548f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx,1 # eax<- v[BB+1] 1549f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 0 # ecx<- v[BB+0] 1550f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl 4(rFP,%edx,4),%eax 1551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl .LOP_CMP_LONG_smaller 1552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg .LOP_CMP_LONG_bigger 1553f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sub (rFP,%edx,4),%ecx 1554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ja .LOP_CMP_LONG_bigger 1555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_CMP_LONG_smaller 1556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_CMP_LONG_finish 1557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQ: /* 0x32 */ 1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_EQ.S */ 1562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1571f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx <- A+ 1572f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 1573f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %ecx # eax <- vA 1574f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1575f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl (rFP,rINST,4),%eax # compare (vA, vB) 1576f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # Get signed branch offset 1577f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume not taken 1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 1579f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1581f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NE: /* 0x33 */ 1591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_NE.S */ 1592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1601f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx <- A+ 1602f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 1603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %ecx # eax <- vA 1604f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1605f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl (rFP,rINST,4),%eax # compare (vA, vB) 1606f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # Get signed branch offset 1607f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume not taken 1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 1609f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1611f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1613f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1614f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LT: /* 0x34 */ 1621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LT.S */ 1622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1631f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx <- A+ 1632f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 1633f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %ecx # eax <- vA 1634f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1635f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl (rFP,rINST,4),%eax # compare (vA, vB) 1636f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # Get signed branch offset 1637f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume not taken 1638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jge 1f 1639f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1641f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1643f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1644f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GE: /* 0x35 */ 1651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GE.S */ 1652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1661f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx <- A+ 1662f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 1663f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %ecx # eax <- vA 1664f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1665f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl (rFP,rINST,4),%eax # compare (vA, vB) 1666f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # Get signed branch offset 1667f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume not taken 1668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl 1f 1669f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1671f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1673f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1674f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GT: /* 0x36 */ 1681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GT.S */ 1682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1691f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx <- A+ 1692f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 1693f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %ecx # eax <- vA 1694f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1695f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl (rFP,rINST,4),%eax # compare (vA, vB) 1696f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # Get signed branch offset 1697f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume not taken 1698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle 1f 1699f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1701f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1703f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1704f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LE: /* 0x37 */ 1711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LE.S */ 1712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bincmp.S */ 1713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic two-operand compare-and-branch operation. Provide a "revcmp" 1715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 1719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vA, vB, +CCCC */ 1721f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx <- A+ 1722f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx <- A 1723f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %ecx # eax <- vA 1724f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 1725f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl (rFP,rINST,4),%eax # compare (vA, vB) 1726f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # Get signed branch offset 1727f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume not taken 1728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg 1f 1729f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1731f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1733f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1734f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_EQZ: /* 0x38 */ 1741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_EQZ.S */ 1742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1751f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,(rFP,rINST,4) # compare (vA, 0) 1752f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # fetch signed displacement 1753f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume branch not taken 1754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 1755f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1757f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1759f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1760f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_NEZ: /* 0x39 */ 1767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_NEZ.S */ 1768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1777f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,(rFP,rINST,4) # compare (vA, 0) 1778f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # fetch signed displacement 1779f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume branch not taken 1780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 1f 1781f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1783f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1785f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1786f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LTZ: /* 0x3a */ 1793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LTZ.S */ 1794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1803f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,(rFP,rINST,4) # compare (vA, 0) 1804f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # fetch signed displacement 1805f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume branch not taken 1806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jge 1f 1807f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1809f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1811f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1812f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GEZ: /* 0x3b */ 1819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GEZ.S */ 1820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1829f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,(rFP,rINST,4) # compare (vA, 0) 1830f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # fetch signed displacement 1831f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume branch not taken 1832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jl 1f 1833f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1835f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1837f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1838f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_GTZ: /* 0x3c */ 1845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_GTZ.S */ 1846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1855f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,(rFP,rINST,4) # compare (vA, 0) 1856f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # fetch signed displacement 1857f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume branch not taken 1858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jle 1f 1859f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1861f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1863f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1864f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IF_LEZ: /* 0x3d */ 1871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IF_LEZ.S */ 1872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/zcmp.S */ 1873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic one-operand compare-and-branch operation. Provide a "revcmp" 1875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fragment that specifies the *reverse* comparison to perform, e.g. 1876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for "if-le" you would use "gt". 1877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez 1879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* if-cmp vAA, +BBBB */ 1881f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,(rFP,rINST,4) # compare (vA, 0) 1882f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),rINST # fetch signed displacement 1883f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $2,%eax # assume branch not taken 1884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jg 1f 1885f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST 1886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project js common_backwardBranch 1887f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,%eax 1888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 1889f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_INDEXED %eax 1890f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED %eax 1891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 1892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3E: /* 0x3e */ 1897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_3E.S */ 1898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_3F: /* 0x3f */ 1905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_3F.S */ 1906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_40: /* 0x40 */ 1913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_40.S */ 1914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_41: /* 0x41 */ 1921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_41.S */ 1922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_42: /* 0x42 */ 1929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_42.S */ 1930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_43: /* 0x43 */ 1937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_43.S */ 1938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 1939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 1940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET: /* 0x44 */ 1945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1954f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 1955f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 1956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 19593e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects 19603e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 19613e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 1962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_contents(%eax,%ecx,4),%eax 1963f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_finish: 1964f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 1965f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 1966f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 1967f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 1968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_WIDE: /* 0x45 */ 1972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_WIDE.S */ 1973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 64 bits. vAA <- vBB[vCC]. 1975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 1978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 1979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 1980f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 1981f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 1982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 1983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 1984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 1985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_AGET_WIDE_finish # index < length, OK 19863e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jmp common_errArrayIndex # index >= length, bail. Expects 19873e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 19883e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 1989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 1991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 1992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_OBJECT: /* 0x46 */ 1993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_OBJECT.S */ 1994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 1995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 1997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 1999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2003f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2004f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 20083e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects 20093e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 20103e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offArrayObject_contents(%eax,%ecx,4),%eax 2012f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_OBJECT_finish: 2013f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2014f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2015f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2016f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BOOLEAN: /* 0x47 */ 2022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_BOOLEAN.S */ 2023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 2024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2032f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2033f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 20373e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects 20383e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 20393e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl offArrayObject_contents(%eax,%ecx,1),%eax 2041f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_BOOLEAN_finish: 2042f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2043f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2044f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2045f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_BYTE: /* 0x48 */ 2051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_BYTE.S */ 2052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 2053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2061f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2062f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 20663e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects 20673e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 20683e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl offArrayObject_contents(%eax,%ecx,1),%eax 2070f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_BYTE_finish: 2071f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2072f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2073f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2074f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_CHAR: /* 0x49 */ 2080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_CHAR.S */ 2081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 2082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2090f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2091f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 20953e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects 20963e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 20973e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl offArrayObject_contents(%eax,%ecx,2),%eax 2099f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_CHAR_finish: 2100f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2101f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2102f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2103f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AGET_SHORT: /* 0x4a */ 2109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET_SHORT.S */ 2110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AGET.S */ 2111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array get, 32 bits or less. vAA <- vBB[vCC]. 2113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short 2115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2119f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2120f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 21243e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects 21253e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 21263e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl offArrayObject_contents(%eax,%ecx,2),%eax 2128f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_AGET_SHORT_finish: 2129f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2130f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2131f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2132f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT: /* 0x4b */ 2138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 2139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 2141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 2143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2147f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2148f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 21523e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects: 21533e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 21543e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,4),%eax 2156f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_finish: 2157f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2158f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,(%eax) 2160f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2161f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_WIDE: /* 0x4c */ 2166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_WIDE.S */ 2167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 64 bits. vBB[vCC]<-vAA. 2169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2174f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2175f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 2179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_APUT_WIDE_finish # index < length, OK 21803e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jmp common_errArrayIndex # index >= length, bail. Expects: 21813e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 21823e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_OBJECT: /* 0x4d */ 2187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_OBJECT.S */ 2188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 2190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 2192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2196f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2197f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2198f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- vAA 2199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 2202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jb .LOP_APUT_OBJECT_continue 22033e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jmp common_errArrayIndex # index >= length, bail. Expects 22043e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 22053e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BOOLEAN: /* 0x4e */ 2210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_BOOLEAN.S */ 2211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 2212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 2214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 2216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2220f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2221f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 22253e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects: 22263e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 22273e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,1),%eax 2229f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_BOOLEAN_finish: 2230f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2231f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb %cl,(%eax) 2233f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2234f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_BYTE: /* 0x4f */ 2240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_BYTE.S */ 2241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 2242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 2244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 2246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2250f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2251f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 22553e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects: 22563e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 22573e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,1),%eax 2259f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_BYTE_finish: 2260f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2261f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb %cl,(%eax) 2263f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2264f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_CHAR: /* 0x50 */ 2270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_CHAR.S */ 2271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 2272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 2274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 2276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2280f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2281f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 22853e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects: 22863e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 22873e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,2),%eax 2289f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_CHAR_finish: 2290f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2291f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %cx,(%eax) 2293f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2294f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_APUT_SHORT: /* 0x51 */ 2300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT_SHORT.S */ 2301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_APUT.S */ 2302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA 2304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short 2306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 2308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 2309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 2310f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB (array object) 2311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecs<- vCC (requested index) 2312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null array object? 2313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # bail if so 2314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl offArrayObject_length(%eax),%ecx 23153e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee jae common_errArrayIndex # index >= length, bail. Expects: 23163e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # arrayObj in eax 23173e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee # index in ecx 2318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal offArrayObject_contents(%eax,%ecx,2),%eax 2319f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LOP_APUT_SHORT_finish: 2320f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2321f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %cx,(%eax) 2323f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2324f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET: /* 0x52 */ 2330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 23379f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2338f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 23399f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2340f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2341f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2342f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2343f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2344f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2345f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2346f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2347f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_finish # no, already resolved 2348f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 23499f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_resolve 2351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE: /* 0x53 */ 2355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_WIDE.S */ 2356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit instance field get. 2358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 23619f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2362f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 23639f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2364f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2365f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2366f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2367f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2368f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2370f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_WIDE_finish # no, already resolved 2372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # for dvmResolveInstField 23739f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_WIDE_resolve 2375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT: /* 0x54 */ 2379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_OBJECT.S */ 2380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 23879f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 23899f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2390f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2391f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2392f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2393f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2394f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2395f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_OBJECT_finish # no, already resolved 2398f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 23999f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_OBJECT_resolve 2401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BOOLEAN: /* 0x55 */ 2406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_BOOLEAN.S */ 2407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 24149f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2415f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 24169f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2417f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2418f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2419f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2420f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2421f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2422f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2423f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2424f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_BOOLEAN_finish # no, already resolved 2425f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 24269f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_BOOLEAN_resolve 2428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_BYTE: /* 0x56 */ 2433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_BYTE.S */ 2434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 24419f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2442f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 24439f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2444f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2445f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2446f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2447f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2448f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2449f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2450f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2451f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_BYTE_finish # no, already resolved 2452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 24539f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_BYTE_resolve 2455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_CHAR: /* 0x57 */ 2460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_CHAR.S */ 2461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 24689f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2469f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 24709f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2472f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2473f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2474f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2475f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2478f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_CHAR_finish # no, already resolved 2479f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 24809f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_CHAR_resolve 2482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_SHORT: /* 0x58 */ 2487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_SHORT.S */ 2488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET.S */ 2489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field get. 2491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 2493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 24959f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2496f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 24979f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2498f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2499f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2500f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2501f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2502f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2503f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2504f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2505f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_SHORT_finish # no, already resolved 2506f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 25079f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IGET_SHORT_resolve 2509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT: /* 0x59 */ 2514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 25229f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2523f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # %edx<- 0000CCCC 25249f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2525f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2526f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2527f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2528f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2529f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2530f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2531f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2532f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_finish # no, already resolved 2533f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 25349f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_resolve 2536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE: /* 0x5a */ 2540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_WIDE.S */ 2541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit instance field put. 2543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 25469f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 25489f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2549f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2550f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2551f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2552f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2553f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2554f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2555f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2556f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_WIDE_finish # no, already resolved 2557f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 25589f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_WIDE_resolve 2560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT: /* 0x5b */ 2564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_OBJECT.S */ 2565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 25663d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Object field put. 2567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 25683d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iput-object 2569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 25719f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2572f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 25739f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2574f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2575f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2576f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2577f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2578f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2579f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2580f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2581f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_OBJECT_finish # no, already resolved 2582f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 25839f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_OBJECT_resolve 2585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BOOLEAN: /* 0x5c */ 2589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_BOOLEAN.S */ 2590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 25989f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2599f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # %edx<- 0000CCCC 26009f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2601f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2602f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2604f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2605f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2606f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2607f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2608f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_BOOLEAN_finish # no, already resolved 2609f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 26109f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_BOOLEAN_resolve 2612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_BYTE: /* 0x5d */ 2617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_BYTE.S */ 2618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 26269f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2627f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # %edx<- 0000CCCC 26289f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2629f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2630f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2631f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2632f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2633f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2634f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2635f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2636f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_BYTE_finish # no, already resolved 2637f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 26389f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_BYTE_resolve 2640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_CHAR: /* 0x5e */ 2645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_CHAR.S */ 2646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 26549f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2655f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # %edx<- 0000CCCC 26569f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2657f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2658f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2659f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2660f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2661f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2662f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2663f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2664f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_CHAR_finish # no, already resolved 2665f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 26669f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_CHAR_resolve 2668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_SHORT: /* 0x5f */ 2673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_SHORT.S */ 2674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT.S */ 2675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit instance field put. 2678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 2680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, field@CCCC */ 26829f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2683f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # %edx<- 0000CCCC 26849f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 2685f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 2686f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 2687f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 2688f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 2689f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 2690f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 2691f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 2692f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_SHORT_finish # no, already resolved 2693f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 26949f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 2695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_IPUT_SHORT_resolve 2696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET: /* 0x60 */ 2701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 27089f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 27109f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_resolve # if not, make it so 2715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_finish: # field ptr in eax 2716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2717f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2718f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2719f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2720f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_WIDE: /* 0x61 */ 2725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_WIDE.S */ 2726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit SGET handler. 2728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* sget-wide vAA, field@BBBB */ 27319f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 27339f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_WIDE_resolve # if not, make it so 2738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_WIDE_finish: # field ptr in eax 2739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%ecx # ecx<- lsw 2740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 4+offStaticField_value(%eax),%eax # eax<- msw 2741f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2742f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2743f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx rINST 0 2744f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 2745f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_OBJECT: /* 0x62 */ 2750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_OBJECT.S */ 2751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 27589f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 27609f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_OBJECT_resolve # if not, make it so 2765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_OBJECT_finish: # field ptr in eax 2766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2767f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2768f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2769f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2770f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BOOLEAN: /* 0x63 */ 2776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_BOOLEAN.S */ 2777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 27849f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 27869f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_BOOLEAN_resolve # if not, make it so 2791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BOOLEAN_finish: # field ptr in eax 2792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2793f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2795f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2796f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_BYTE: /* 0x64 */ 2802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_BYTE.S */ 2803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 28109f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 28129f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_BYTE_resolve # if not, make it so 2817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_BYTE_finish: # field ptr in eax 2818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2819f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2820f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2821f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2822f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_CHAR: /* 0x65 */ 2828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_CHAR.S */ 2829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 28369f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 28389f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_CHAR_resolve # if not, make it so 2843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_CHAR_finish: # field ptr in eax 2844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2845f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2846f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2847f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2848f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SGET_SHORT: /* 0x66 */ 2854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET_SHORT.S */ 2855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SGET.S */ 2856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SGET handler. 2858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 2860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 28629f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 28649f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SGET_SHORT_resolve # if not, make it so 2869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SGET_SHORT_finish: # field ptr in eax 2870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStaticField_value(%eax),%eax 2871f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2872f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2873f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 2874f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT: /* 0x67 */ 2880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 28843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 2885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 28879f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 28899f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_resolve # if not, make it so 2894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_finish: # field ptr in eax 2895f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2897f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2899f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_WIDE: /* 0x68 */ 2904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_WIDE.S */ 2905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: sput, sput-object, sput-boolean, sput-byte, sput-char, sput-short 2909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 29119f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 29139f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_WIDE_resolve # if not, make it so 2918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_WIDE_finish: # field ptr in eax 2919f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx rINST 0 # rINST<- lsw 2920f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST rINST 1 # ecx<- msw 2921f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2922f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2923f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %ecx,offStaticField_value(%eax) 2924f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,4+offStaticField_value(%eax) 2925f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_OBJECT: /* 0x69 */ 2930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_OBJECT.S */ 2931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 29323d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * SPUT object handler. 2933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 29359f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 29379f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 29393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField 2940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_OBJECT_resolve # if not, make it so 2942d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee.LOP_SPUT_OBJECT_finish: # field ptr in eax 2943f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- AA 2944f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 29453d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_SPUT_OBJECT_continue 2946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BOOLEAN: /* 0x6a */ 2950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_BOOLEAN.S */ 2951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 29553d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 2956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 29589f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 29609f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_BOOLEAN_resolve # if not, make it so 2965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BOOLEAN_finish: # field ptr in eax 2966f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2967f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2968f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2970f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 2974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 2975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_BYTE: /* 0x6b */ 2976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_BYTE.S */ 2977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 2978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 2979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 2980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 29813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 2982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 29849f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 2985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 29869f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 2987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 2988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 2989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 2990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_BYTE_resolve # if not, make it so 2991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_BYTE_finish: # field ptr in eax 2992f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 2993f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 2994f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 2995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 2996f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 2997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_CHAR: /* 0x6c */ 3002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_CHAR.S */ 3003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 3004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 3006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 30073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 3008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 30109f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 3011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 30129f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 3013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 3014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 3015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 3016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_CHAR_resolve # if not, make it so 3017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_CHAR_finish: # field ptr in eax 3018f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 3019f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 3020f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 3021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 3022f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SPUT_SHORT: /* 0x6d */ 3028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT_SHORT.S */ 3029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SPUT.S */ 3030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * General 32-bit SPUT handler. 3032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 30333d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 3034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 30369f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 3037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 30389f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 3039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 3040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 3041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 3042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_SPUT_SHORT_resolve # if not, make it so 3043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_SPUT_SHORT_finish: # field ptr in eax 3044f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 3045f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 3046f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 3047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,offStaticField_value(%eax) 3048f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL: /* 0x6e */ 3054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */ 3055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 3058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 3060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 30639f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 3064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 30659f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%eax),%eax # eax<- pDvmDex 3066f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%eax),%eax # eax<- pDvmDex->pResMethods 3068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved baseMethod 3069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 3070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_continue # yes, continue 30719f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 3072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 30739f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%eax),%eax # eax<- self->method 3074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_VIRTUAL_more 3075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER: /* 0x6f */ 3079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */ 3080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 3082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 3084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 30879f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,rINST 3088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 30899f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(rINST),%ecx # ecx<- pDvmDex 3090f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved baseMethod 30939f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(rINST),%eax # eax<- method 3094f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 4(rPC),rINST # rINST<- GFED or CCCC 3095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3096f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl $0xf,rINST # rINST<- D (or stays CCCC) 3097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3098f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- "this" ptr 3099f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST # null "this"? 3100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, throw 3101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 3102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 3103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_continue # yes - go on 3104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_SUPER_resolve 3105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT: /* 0x70 */ 3109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */ 3110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 3112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 3114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 3115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 3116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 3117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/range 3119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 31229f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 3123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 31249f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 3125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3127f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 4(rPC),%edx # edx<- GFED or CCCC 3128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 3129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3130f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl $0xf,%edx # edx<- D (or stays CCCC) 3131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 3133f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %edx # ecx<- "this" ptr 3134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INVOKE_DIRECT_resolve # not resolved, do it now 3135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_finish: 3136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null "this"? 3137c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange # no, continue on 3138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 3139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC: /* 0x71 */ 3143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */ 3144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 3146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 3148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 31519f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 3152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 31539f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 3154f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 3157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 3158c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodNoRange 31599f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 31609f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 3161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 3162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 3163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 3165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_STATIC_continue 3166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE: /* 0x72 */ 3170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */ 3171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 3173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 3175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 31799f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 3180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 3181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 3182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3183f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- "this" 3184f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null this? 3186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, fail 3187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax# eax<- thisPtr->clazz 3188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- class 31899f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- methodClassDex 31909f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- method 3191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) # arg3<- dex 3192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG2(%esp) # arg2<- method 3194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_INTERFACE_continue 3196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_73: /* 0x73 */ 3200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_73.S */ 3201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 3202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 3203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_RANGE: /* 0x74 */ 3208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_RANGE.S */ 3209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL.S */ 3210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a virtual method call. 3213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-virtual, invoke-virtual/range 3215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 32189f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 3219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 32209f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%eax),%eax # eax<- pDvmDex 3221f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%eax),%eax # eax<- pDvmDex->pResMethods 3223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- resolved baseMethod 3224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 3225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_VIRTUAL_RANGE_continue # yes, continue 32269f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 3227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) # arg1<- ref 32289f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%eax),%eax # eax<- self->method 3229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_VIRTUAL_RANGE_more 3230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_RANGE: /* 0x75 */ 3235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_RANGE.S */ 3236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER.S */ 3237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a "super" method call. 3239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-super, invoke-super/range 3241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 32449f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,rINST 3245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 32469f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(rINST),%ecx # ecx<- pDvmDex 3247f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%ecx # ecx<- resolved baseMethod 32509f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(rINST),%eax # eax<- method 3251f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 4(rPC),rINST # rINST<- GFED or CCCC 3252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3253f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl $0xf,rINST # rINST<- D (or stays CCCC) 3254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3255f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- "this" ptr 3256f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl rINST,rINST # null "this"? 3257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, throw 3258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax # eax<- method->clazz 3259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # already resolved? 3260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_INVOKE_SUPER_RANGE_continue # yes - go on 3261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_SUPER_RANGE_resolve 3262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_DIRECT_RANGE: /* 0x76 */ 3267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT_RANGE.S */ 3268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_DIRECT.S */ 3269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a direct method call. 3271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (We could defer the "is 'this' pointer null" test to the common 3273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method invocation code, and use a flag to indicate that static 3274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls don't count. If we do this as part of copying the arguments 3275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out we could avoiding loading the first arg twice.) 3276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-direct, invoke-direct/range 3278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 32819f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 3282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 32839f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 3284f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3286f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 4(rPC),%edx # edx<- GFED or CCCC 3287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 3288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3289f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl $0xf,%edx # edx<- D (or stays CCCC) 3290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # already resolved? 3292f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %edx # ecx<- "this" ptr 3293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_INVOKE_DIRECT_RANGE_resolve # not resolved, do it now 3294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_INVOKE_DIRECT_RANGE_finish: 3295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # null "this"? 3296c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange # no, continue on 3297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_errNullObject 3298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_STATIC_RANGE: /* 0x77 */ 3303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC_RANGE.S */ 3304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_STATIC.S */ 3305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle a static method call. 3307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-static, invoke-static/range 3309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 33129f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 3313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 33149f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 3315f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 3317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 3318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 3319c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethodRange 33209f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 33219f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 3322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax 3323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 3324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 3326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_STATIC_RANGE_continue 3327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_INTERFACE_RANGE: /* 0x78 */ 3332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE_RANGE.S */ 3333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_INTERFACE.S */ 3334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an interface method call. 3336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: invoke-interface, invoke-interface/range 3338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 3340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 3341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 33429f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 3343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 3344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 3345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3346f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- "this" 3347f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 3348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null this? 3349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yes, fail 3350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax# eax<- thisPtr->clazz 3351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) # arg0<- class 33529f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- methodClassDex 33539f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- method 3354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) # arg3<- dex 3355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 3356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG2(%esp) # arg2<- method 3357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 3358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_INVOKE_INTERFACE_RANGE_continue 3359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_79: /* 0x79 */ 3364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_79.S */ 3365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 3366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 3367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_UNUSED_7A: /* 0x7a */ 3372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_UNUSED_7A.S */ 3373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 3374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 3375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_INT: /* 0x7b */ 3380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_INT.S */ 3381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3387f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3389f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 3390f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3391f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3392f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 33937365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 33947365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %eax 3396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 3397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_INT: /* 0x7c */ 3403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOT_INT.S */ 3404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3410f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3411f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3412f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 3413f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3414f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3415f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 34167365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 34177365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %eax 3419f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 3420f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_LONG: /* 0x7d */ 3426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_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] 3433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %eax 3434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl $0,%ecx 3435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project negl %ecx 3436f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3437f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[A+0]<- eax 3438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx rINST 1 # v[A+1]<- ecx 3439f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 3440f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NOT_LONG: /* 0x7e */ 3445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NOT_LONG.S */ 3446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3447f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 3448f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 3449f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 3450f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx 0 # eax<- v[B+0] 3451f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # ecx<- v[B+1] 3452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %eax 3454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notl %ecx 3455f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[A+0]<- eax 3456f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx rINST 1 # v[A+1]<- ecx 3457f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 3458f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_FLOAT: /* 0x7f */ 3463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_FLOAT.S */ 3464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3469f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3470f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # %st0<- vB 3472f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3473f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3474f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 3475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fchs 3476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # vA<- %st0 3477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_NEG_DOUBLE: /* 0x80 */ 3483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_NEG_DOUBLE.S */ 3484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3489f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3490f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3491f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # %st0<- vB 3492f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3493f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 3495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fchs 3496f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # vA<- %st0 3497f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_LONG: /* 0x81 */ 3503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_LONG.S */ 3504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* int to long vA, vB */ 3505f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- +A 3506f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%eax # eax<- B 3507f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 3508f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 3509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd # edx:eax<- sssssssBBBBBBBB 3510f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # v[A+1]<- edx/rPC 3511f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3512f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 0 # v[A+0]<- %eax 3513f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 3514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_FLOAT: /* 0x82 */ 3519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_FLOAT.S */ 3520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3525f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3526f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3527f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fildl (rFP,rINST,4) # %st0<- vB 3528f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3529f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3530f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 35317365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3532f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # vA<- %st0 3533f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_DOUBLE: /* 0x83 */ 3539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_DOUBLE.S */ 3540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3545f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3546f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fildl (rFP,rINST,4) # %st0<- vB 3548f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3549f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3550f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 35517365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3552f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # vA<- %st0 3553f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_INT: /* 0x84 */ 3559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_INT.S */ 3560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* we ignore the high word, making this equivalent to a 32-bit reg move */ 3561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MOVE.S */ 3562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* for move, move-object, long-to-int */ 3563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB */ 3564f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- BA 3565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 3566f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee shrl $4,rINST # rINST<- B 3567f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 3568f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3569f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 3570f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx %eax # fp[A]<-fp[B] 3571f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_FLOAT: /* 0x85 */ 3577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_FLOAT.S */ 3578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3585f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fildll (rFP,rINST,4) # %st0<- vB 3586f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3587f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3588f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 35897365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3590f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # vA<- %st0 3591f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_LONG_TO_DOUBLE: /* 0x86 */ 3597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_LONG_TO_DOUBLE.S */ 3598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3604f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3605f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fildll (rFP,rINST,4) # %st0<- vB 3606f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3607f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3608f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 36097365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3610f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # vA<- %st0 3611f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_INT: /* 0x87 */ 3617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_INT.S */ 3618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3627f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3628f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3630f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # %st0<- vB 3631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3632f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # %st0<- vB 3633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3639f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3640f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_INT_continue 3649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_LONG: /* 0x88 */ 3654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_LONG.S */ 3655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3664f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3665f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3667f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # %st0<- vB 3668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3669f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # %st0<- vB 3670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3676f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3677f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_FLOAT_TO_LONG_continue 3686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_FLOAT_TO_DOUBLE: /* 0x89 */ 3691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_FLOAT_TO_DOUBLE.S */ 3692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3697f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3698f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3699f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # %st0<- vB 3700f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3701f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3702f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 37037365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3704f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # vA<- %st0 3705f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_INT: /* 0x8a */ 3711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_INT.S */ 3712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3721f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3722f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3724f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # %st0<- vB 3725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3726f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # %st0<- vB 3727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3733f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3734f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 0 3737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_INT_continue 3743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_LONG: /* 0x8b */ 3748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_LONG.S */ 3749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/cvtfp_int.S */ 3750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* On fp to int conversions, Java requires that 3751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the result > maxint, it should be clamped to maxint. If it is less 3752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than minint, it should be clamped to minint. If it is a nan, the result 3753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * should be zero. Further, the rounding mode is to truncate. This model 3754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * differs from what is delivered normally via the x86 fpu, so we have 3755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to play some games. 3756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* float/double to int/long vA, vB */ 3758f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3759f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3761f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # %st0<- vB 3762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3763f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # %st0<- vB 3764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ftst 3766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fnstcw LOCAL0_OFFSET(%ebp) # remember original rounding mode 3767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl LOCAL0_OFFSET(%ebp),%eax 3768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movb $0xc,%ah 3769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movw %ax,LOCAL0_OFFSET+2(%ebp) 3770f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldcw LOCAL0_OFFSET+2(%ebp) # set "to zero" rounding mode 3771f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 3773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if 1 3774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpll (rFP,%ecx,4) # convert and store 3775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .else 3776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fistpl (rFP,%ecx,4) # convert and store 3777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 3778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldcw LOCAL0_OFFSET(%ebp) # restore previous rounding mode 3779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DOUBLE_TO_LONG_continue 3780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DOUBLE_TO_FLOAT: /* 0x8c */ 3785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DOUBLE_TO_FLOAT.S */ 3786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/fpcvt.S */ 3787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit FP conversion operation. 3789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3791f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3792f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3793f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # %st0<- vB 3794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3795f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3796f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 37977365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3798f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # vA<- %st0 3799f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_BYTE: /* 0x8d */ 3805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_BYTE.S */ 3806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3812f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3813f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3814f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 3815f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3816f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3817f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 38187365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 38197365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl %al,%eax 3821f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 3822f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_CHAR: /* 0x8e */ 3828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_CHAR.S */ 3829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3835f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3836f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3837f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 3838f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3839f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3840f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 38417365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 38427365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl %ax,%eax 3844f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 3845f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INT_TO_SHORT: /* 0x8f */ 3851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INT_TO_SHORT.S */ 3852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unop.S */ 3853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit unary operation. Provide an "instr" line that 3855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = op eax". 3856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* unop vA, vB */ 3858f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- A+ 3859f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 3860f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 3861f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 3862f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 3863f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 38647365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 38657365493ad8d360c1dcf9cd8b6eee62747af01caeCarl Shapiro 3866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl %ax,%eax 3867f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 3868f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT: /* 0x90 */ 3874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT.S */ 3875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3886f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 3887f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- CC 3888f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 3889f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3890f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 3891f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 3892f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 3893f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT: /* 0x91 */ 3899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_INT.S */ 3900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 3906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 3908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 3909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3911f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 3912f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- CC 3913f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 3914f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee subl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 3915f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 3916f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 3917f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 3918f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT: /* 0x92 */ 3924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT.S */ 3925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary multiplication. 3927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul vAA, vBB, vCC */ 3929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3931f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 3932f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull (rFP,%ecx,4),%eax # trashes edx 3933f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 3934f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 3935f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 3936f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 3937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT: /* 0x93 */ 3941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT.S */ 3942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv.S */ 3943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 3946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 3947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3951f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 3952f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 3953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 3954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 3955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 3956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_continue_div 3957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 3958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_continue_div 3959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 3960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_finish_div 3961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT: /* 0x94 */ 3967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT.S */ 3968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv.S */ 3969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 3972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 3973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 3975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 3976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 3977f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 3978f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 3979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 3980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 3981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 3982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_continue_div 3983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 3984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_continue_div 3985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 3986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_finish_div 3987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 3991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 3992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT: /* 0x95 */ 3993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT.S */ 3994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 3995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 3997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 3998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 3999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 4000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 4002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 4003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4005f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 4006f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- CC 4007f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 4008f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 4009f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4010f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4011f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4012f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT: /* 0x96 */ 4018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT.S */ 4019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 4020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 4023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 4024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 4025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 4027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 4028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4030f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 4031f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- CC 4032f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 4033f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee orl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 4034f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4035f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4036f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4037f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT: /* 0x97 */ 4043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT.S */ 4044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop.S */ 4045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation. Provide an "instr" line that 4047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifies an instruction that performs "result = eax op (rFP,%ecx,4)". 4048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 4049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 4050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int, sub-int, and-int, or-int, 4052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * xor-int, shl-int, shr-int, ushr-int 4053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4055f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 4056f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- CC 4057f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 4058f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee xorl (rFP,%ecx,4),%eax # ex: addl (rFP,%ecx,4),%eax 4059f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4060f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4061f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4062f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT: /* 0x98 */ 4068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT.S */ 4069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 4070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 4072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 4073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4077f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 4078f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: addl %ecx,%eax 4080f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4081f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4082f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4083f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT: /* 0x99 */ 4089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT.S */ 4090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 4091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 4093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 4094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4098f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 4099f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: addl %ecx,%eax 4101f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4102f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4103f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4104f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT: /* 0x9a */ 4110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT.S */ 4111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop1.S */ 4112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary operation in which both operands loaded to 4114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registers (op0 in eax, op1 in ecx). 4115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4119f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vBB 4120f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: addl %ecx,%eax 4122f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4123f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4124f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG: /* 0x9b */ 4131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_LONG.S */ 4132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4140f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 # edx<- v[BB+0] 4141f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 # eax<- v[BB+1] 4142f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl (rFP,%ecx,4),%edx # ex: addl (rFP,%ecx,4),%edx 4143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project adcl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4144f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 0 # v[AA+0] <- edx 4145f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4146f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[AA+1] <- eax 4147f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4148f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG: /* 0x9c */ 4154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_LONG.S */ 4155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4163f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 # edx<- v[BB+0] 4164f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 # eax<- v[BB+1] 4165f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee subl (rFP,%ecx,4),%edx # ex: addl (rFP,%ecx,4),%edx 4166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sbbl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4167f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 0 # v[AA+0] <- edx 4168f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4169f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[AA+1] <- eax 4170f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4171f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG: /* 0x9d */ 4177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_LONG.S */ 4178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply. 4180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We could definately use more free registers for 4182f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * this code. We spill rINSTw (ebx), 4183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * giving us eax, ebc, ecx and edx as computational 4184f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * temps. On top of that, we'll spill edi (rFP) 41853b8a9072510222067b7c48fe2d59d1e58436be24buzbee * for use as the vB pointer and esi (rPC) for use 4186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as the vC pointer. Yuck. 4187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long vAA, vBB, vCC */ 4189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- B 4190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- C 41913b8a9072510222067b7c48fe2d59d1e58436be24buzbee SPILL_TMP2(%esi) # save Dalvik PC 4192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) 4193f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL(rINST) 4194f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rFP,%eax,4),%esi # esi<- &v[B] 4195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rFP,%ecx,4),rFP # rFP<- &v[C] 4196f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4(%esi),%ecx # ecx<- Bmsw 4197f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull (rFP),%ecx # ecx<- (Bmsw*Clsw) 4198f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4(rFP),%eax # eax<- Cmsw 4199f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull (%esi),%eax # eax<- (Cmsw*Blsw) 4200f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl %eax,%ecx # ecx<- (Bmsw*Clsw)+(Cmsw*Blsw) 4201f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (rFP),%eax # eax<- Clsw 4202f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee mull (%esi) # eax<- (Clsw*Alsw) 4203f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL(rINST) 4204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 4205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MUL_LONG_continue 4206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG: /* 0x9e */ 4210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG.S */ 4211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div vAA, vBB, vCC */ 4212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 4213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 4214f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 4215f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 4216f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG2(%esp) 4217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 4218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_check_zero 4219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 4220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_check_neg1 4221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_notSpecial: 4222f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %ecx 0 4223f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 4224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_notSpecial1: 4225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 4226f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) 4227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 4228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_continue 4229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG: /* 0x9f */ 4233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_LONG.S */ 4234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG.S */ 4235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div vAA, vBB, vCC */ 4236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%eax # eax<- CC 4237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%ecx # ecx<- BB 4238f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 4239f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 4240f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG2(%esp) 4241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 4242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_check_zero 4243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 4244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_check_neg1 4245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_notSpecial: 4246f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %ecx 0 4247f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 4248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_notSpecial1: 4249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG3(%esp) 4250f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) 4251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 4252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_continue 4253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG: /* 0xa0 */ 4258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_LONG.S */ 4259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4267f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 # edx<- v[BB+0] 4268f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 # eax<- v[BB+1] 4269f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl (rFP,%ecx,4),%edx # ex: addl (rFP,%ecx,4),%edx 4270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4271f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 0 # v[AA+0] <- edx 4272f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4273f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[AA+1] <- eax 4274f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4275f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG: /* 0xa1 */ 4281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_LONG.S */ 4282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4290f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 # edx<- v[BB+0] 4291f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 # eax<- v[BB+1] 4292f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee orl (rFP,%ecx,4),%edx # ex: addl (rFP,%ecx,4),%edx 4293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4294f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 0 # v[AA+0] <- edx 4295f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4296f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[AA+1] <- eax 4297f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4298f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG: /* 0xa2 */ 4304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_LONG.S */ 4305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide.S */ 4306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4313f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 # edx<- v[BB+0] 4314f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 # eax<- v[BB+1] 4315f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee xorl (rFP,%ecx,4),%edx # ex: addl (rFP,%ecx,4),%edx 4316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl 4(rFP,%ecx,4),%eax # ex: adcl 4(rFP,%ecx,4),%eax 4317f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 0 # v[AA+0] <- edx 4318f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4319f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[AA+1] <- eax 4320f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4321f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG: /* 0xa3 */ 4327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_LONG.S */ 4328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long vAA, vBB, vCC */ 4337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4339f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* rINSTw gets AA */ 4340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4342f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 1 # ecx<- v[BB+1] 4343f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- vCC 4344f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 0 # eax<- v[BB+0] 4345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shldl %eax,%edx 4346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax 4347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edx 4350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 4351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # v[AA+1]<- %edx 4353f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHL_LONG_finish 4355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG: /* 0xa4 */ 4359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_LONG.S */ 4360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long vAA, vBB, vCC */ 4369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* rINSTw gets AA */ 4372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4374f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 1 # edx<- v[BB+1] 4375f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- vCC 4376f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 0 # eax<- v[BB+0] 4377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%edx 4379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $31,%edx 4383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4384f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # v[AA+1]<- edx 4385f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHR_LONG_finish 4387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG: /* 0xa5 */ 4391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_LONG.S */ 4392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 4395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 4396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. x86 shifts automatically mask off 4397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the low 5 bits of %cl, so have to handle the 64 > shiftcount > 31 4398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * case specially. 4399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long vAA, vBB, vCC */ 4401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 4402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 4403f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* rINSTw gets AA */ 4404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 4405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- CC 4406f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 1 # edx<- v[BB+1] 4407f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- vCC 4408f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 0 # eax<- v[BB+0] 4409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 4410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%edx 4411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 4412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 4413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 4414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %edx,%edx 4415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 4416b703ba2fbbf626a087903b5ee890989d18fd0c2bbuzbee SET_VREG_WORD %edx rINST 1 # v[AA+1]<- edx 4417f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_USHR_LONG_finish 4419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT: /* 0xa6 */ 4423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_FLOAT.S */ 4424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4431f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4432f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4433f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%eax,4) # vCC to fp stack 4434f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fadds (rFP,%ecx,4) # ex: faddp 4435f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4436f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4437f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,rINST,4) # %st to vAA 4438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT: /* 0xa7 */ 4444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_FLOAT.S */ 4445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4453f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4454f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%eax,4) # vCC to fp stack 4455f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fsubs (rFP,%ecx,4) # ex: faddp 4456f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4457f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4458f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,rINST,4) # %st to vAA 4459f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT: /* 0xa8 */ 4465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_FLOAT.S */ 4466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4473f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4474f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4475f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%eax,4) # vCC to fp stack 4476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fmuls (rFP,%ecx,4) # ex: faddp 4477f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4478f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4479f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,rINST,4) # %st to vAA 4480f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT: /* 0xa9 */ 4486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_FLOAT.S */ 4487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4494f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4495f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4496f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%eax,4) # vCC to fp stack 4497f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fdivs (rFP,%ecx,4) # ex: faddp 4498f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4499f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4500f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,rINST,4) # %st to vAA 4501f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT: /* 0xaa */ 4507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_FLOAT.S */ 4508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float vAA, vBB, vCC */ 4509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vCC to fp stack 4512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%eax,4) # vCC to fp stack 4513f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- AA 4514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 4516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 4517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 4518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 4519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 4520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 4521f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vAA 4523f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE: /* 0xab */ 4528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_DOUBLE.S */ 4529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4536f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4537f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4538f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%eax,4) # vCC to fp stack 4539f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee faddl (rFP,%ecx,4) # ex: faddp 4540f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4541f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4542f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,rINST,4) # %st to vAA 4543f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE: /* 0xac */ 4549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_DOUBLE.S */ 4550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4557f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4558f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4559f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%eax,4) # vCC to fp stack 4560f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fsubl (rFP,%ecx,4) # ex: faddp 4561f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4562f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4563f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,rINST,4) # %st to vAA 4564f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE: /* 0xad */ 4570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_DOUBLE.S */ 4571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4578f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4579f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4580f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%eax,4) # vCC to fp stack 4581f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fmull (rFP,%ecx,4) # ex: faddp 4582f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4584f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,rINST,4) # %st to vAA 4585f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE: /* 0xae */ 4591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_DOUBLE.S */ 4592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop.S */ 4593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 4595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 4597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop vAA, vBB, vCC */ 4599f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- CC 4600f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 3(rPC),%ecx # ecx<- BB 4601f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%eax,4) # vCC to fp stack 4602f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fdivl (rFP,%ecx,4) # ex: faddp 4603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4604f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4605f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,rINST,4) # %st to vAA 4606f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE: /* 0xaf */ 4612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_DOUBLE.S */ 4613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float vAA, vBB, vCC */ 4614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 3(rPC),%ecx # ecx<- BB 4615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- CC 4616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vCC to fp stack 4617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%eax,4) # vCC to fp stack 4618f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- AA 4619f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 4620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 4621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 4622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 4623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 4624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 4625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 4626f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 4627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vAA 4628f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_2ADDR: /* 0xb0 */ 4633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_2ADDR.S */ 4634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4650f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 4651f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4652f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 4653f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4654f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 4655f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4656f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4657f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_INT_2ADDR: /* 0xb1 */ 4663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_INT_2ADDR.S */ 4664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4680f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 4681f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4682f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 4683f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4684f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 4685f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee subl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4686f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4687f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_2ADDR: /* 0xb2 */ 4693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_2ADDR.S */ 4694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul vA, vB */ 4695f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 4696f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4697f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 4698f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 4699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project imull (rFP,%ecx,4),%eax 4700f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4701f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax %ecx 4702f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4703f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_2ADDR: /* 0xb3 */ 4708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_2ADDR.S */ 4709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv2addr.S */ 4710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 4712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 4713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/2addr vA, vB */ 4715f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # eax<- BA 4716f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 4717f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4718f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 4719f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vBB 4720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 4721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 4722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 4723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_2ADDR_continue_div2addr 4724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 4725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_2ADDR_continue_div2addr 4726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 4727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_2ADDR_finish_div2addr 4728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_2ADDR: /* 0xb4 */ 4734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_2ADDR.S */ 4735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindiv2addr.S */ 4736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 4738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 4739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/2addr vA, vB */ 4741f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # eax<- BA 4742f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 4743f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4744f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 4745f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vBB 4746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 4747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 4748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 4749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_2ADDR_continue_div2addr 4750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 4751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_2ADDR_continue_div2addr 4752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 4753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_2ADDR_finish_div2addr 4754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_2ADDR: /* 0xb5 */ 4760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_2ADDR.S */ 4761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4777f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 4778f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4779f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 4780f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4781f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 4782f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4783f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4784f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_2ADDR: /* 0xb6 */ 4790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_2ADDR.S */ 4791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4807f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 4808f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4809f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 4810f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4811f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 4812f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee orl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4813f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4814f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_2ADDR: /* 0xb7 */ 4820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_2ADDR.S */ 4821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binop2addr.S */ 4822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "/2addr" binary operation. Provide an "instr" line 4824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = r0 op r1". 4825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an ARM instruction or a function call. (If the result 4826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 4827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If "chkzero" is set to 1, we perform a divide-by-zero check on 4829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * vCC (r1). Useful for integer division and modulus. 4830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr, 4832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr, 4833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/2addr, shr-int/2addr, ushr-int/2addr, add-float/2addr, 4834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sub-float/2addr, mul-float/2addr, div-float/2addr, rem-float/2addr 4835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4837f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 4838f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4839f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vB 4840f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4841f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 4842f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee xorl %eax,(rFP,%ecx,4) # for ex: addl %eax,(rFP,%ecx,4) 4843f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4844f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_2ADDR: /* 0xb8 */ 4850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT_2ADDR.S */ 4851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4856f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # eax<- BA 4857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4858f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4859f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 4860f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 4861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: sarl %cl,%eax 4862f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4863f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4864f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4865f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_2ADDR: /* 0xb9 */ 4871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT_2ADDR.S */ 4872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4877f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # eax<- BA 4878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4879f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4880f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 4881f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 4882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: sarl %cl,%eax 4883f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4884f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4885f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4886f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_2ADDR: /* 0xba */ 4892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT_2ADDR.S */ 4893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/shop2addr.S */ 4894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "shift/2addr" operation. 4896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shift/2addr vA, vB */ 4898f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # eax<- BA 4899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4900f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # eax<- vBB 4901f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 4902f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax rINST # eax<- vAA 4903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: sarl %cl,%eax 4904f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4905f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 4906f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4907f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_LONG_2ADDR: /* 0xbb */ 4913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_LONG_2ADDR.S */ 4914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4919f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 4920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4921f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx 0 # eax<- v[B+0] 4922f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # eax<- v[B+1] 4923f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xF,rINSTbl # rINST<- A 4924f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl %eax,(rFP,rINST,4) # example: addl %eax,(rFP,rINST,4) 4925f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee adcl %ecx,4(rFP,rINST,4) # example: adcl %ecx,4(rFP,rINST,4) 4926f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4927f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4928f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_LONG_2ADDR: /* 0xbc */ 4934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_LONG_2ADDR.S */ 4935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 4936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 4938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 4940f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 4941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 4942f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx 0 # eax<- v[B+0] 4943f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # eax<- v[B+1] 4944f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xF,rINSTbl # rINST<- A 4945f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee subl %eax,(rFP,rINST,4) # example: addl %eax,(rFP,rINST,4) 4946f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sbbl %ecx,4(rFP,rINST,4) # example: adcl %ecx,4(rFP,rINST,4) 4947f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 4948f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 4949f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 4950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_LONG_2ADDR: /* 0xbd */ 4955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_LONG_2ADDR.S */ 4956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply, 2-addr version 4958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We could definately use more free registers for 4960f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * this code. We must spill %edx (edx) because it 4961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is used by imul. We'll also spill rINST (ebx), 4962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * giving us eax, ebc, ecx and edx as computational 4963f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * temps. On top of that, we'll spill %esi (edi) 4964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for use as the vA pointer and rFP (esi) for use 4965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as the vB pointer. Yuck. 4966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 4967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long/2addr vA, vB */ 4968f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- BA 4969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%al # eax<- A 4970f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 4971f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP2(%esi) 4972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) 4973f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rFP,%eax,4),%esi # %esi<- &v[A] 4974f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rFP,rINST,4),rFP # rFP<- &v[B] 4975f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4(%esi),%ecx # ecx<- Amsw 4976f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull (rFP),%ecx # ecx<- (Amsw*Blsw) 4977f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4(rFP),%eax # eax<- Bmsw 4978f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull (%esi),%eax # eax<- (Bmsw*Alsw) 4979f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl %eax,%ecx # ecx<- (Amsw*Blsw)+(Bmsw*Alsw) 4980f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (rFP),%eax # eax<- Blsw 4981f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee mull (%esi) # eax<- (Blsw*Alsw) 4982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_MUL_LONG_2ADDR_continue 4983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 4985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 4986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_LONG_2ADDR: /* 0xbe */ 4987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */ 4988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/2addr vA, vB */ 4989f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax 4990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,%eax # eax<- B 4991f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 4992f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 4993f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 4994f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG2(%esp) 4995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 4996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_2ADDR_check_zero 4997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 4998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_DIV_LONG_2ADDR_check_neg1 4999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial: 5000f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx rINST 0 5001f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx rINST 1 5002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_DIV_LONG_2ADDR_notSpecial1: 5003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_LONG_2ADDR_continue 5004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_LONG_2ADDR: /* 0xbf */ 5008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_LONG_2ADDR.S */ 5009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_LONG_2ADDR.S */ 5010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/2addr vA, vB */ 5011f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax 5012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl $4,%eax # eax<- B 5013f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5014f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx %eax 0 5015f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %eax 1 5016f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG2(%esp) 5017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 5018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_2ADDR_check_zero 5019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%eax 5020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .LOP_REM_LONG_2ADDR_check_neg1 5021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial: 5022f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx rINST 0 5023f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx rINST 1 5024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LOP_REM_LONG_2ADDR_notSpecial1: 5025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_LONG_2ADDR_continue 5026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_LONG_2ADDR: /* 0xc0 */ 5031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_LONG_2ADDR.S */ 5032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 5033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 5035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5037f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5039f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx 0 # eax<- v[B+0] 5040f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # eax<- v[B+1] 5041f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xF,rINSTbl # rINST<- A 5042f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %eax,(rFP,rINST,4) # example: addl %eax,(rFP,rINST,4) 5043f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl %ecx,4(rFP,rINST,4) # example: adcl %ecx,4(rFP,rINST,4) 5044f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5045f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5046f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_LONG_2ADDR: /* 0xc1 */ 5052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_LONG_2ADDR.S */ 5053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 5054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 5056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5058f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5060f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx 0 # eax<- v[B+0] 5061f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # eax<- v[B+1] 5062f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xF,rINSTbl # rINST<- A 5063f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee orl %eax,(rFP,rINST,4) # example: addl %eax,(rFP,rINST,4) 5064f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee orl %ecx,4(rFP,rINST,4) # example: adcl %ecx,4(rFP,rINST,4) 5065f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5066f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5067f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_LONG_2ADDR: /* 0xc2 */ 5073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_LONG_2ADDR.S */ 5074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopWide2addr.S */ 5075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 64-bit binary operation. 5077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5079f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 5081f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax %ecx 0 # eax<- v[B+0] 5082f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %ecx %ecx 1 # eax<- v[B+1] 5083f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xF,rINSTbl # rINST<- A 5084f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee xorl %eax,(rFP,rINST,4) # example: addl %eax,(rFP,rINST,4) 5085f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee xorl %ecx,4(rFP,rINST,4) # example: adcl %ecx,4(rFP,rINST,4) 5086f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5087f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5088f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_LONG_2ADDR: /* 0xc3 */ 5094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_LONG_2ADDR.S */ 5095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 5097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 5098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 5100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 5101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 5102f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* rINSTw gets AA */ 5103f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5104f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5105f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax rINST 0 # eax<- v[AA+0] 5106f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 5107f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx rINST 1 # edx<- v[AA+1] 5108f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- vBB 5109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shldl %eax,%edx 5110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax 5111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 5112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 5113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,%edx 5114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 5115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 5116f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # v[AA+1]<- edx 5117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHL_LONG_2ADDR_finish 5118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_LONG_2ADDR: /* 0xc4 */ 5122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_LONG_2ADDR.S */ 5123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 5125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 5126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 5128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 5129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 5130f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* rINSTw gets AA */ 5131f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5132f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5133f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax rINST 0 # eax<- v[AA+0] 5134f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 5135f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx rINST 1 # edx<- v[AA+1] 5136f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- vBB 5137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 5138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%edx 5139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 5140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 5141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 5142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $31,%edx 5143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 5144f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # v[AA+1]<- edx 5145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_SHR_LONG_2ADDR_finish 5146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_LONG_2ADDR: /* 0xc5 */ 5150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_LONG_2ADDR.S */ 5151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 5153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit shift distance. 5154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shl-long/2addr vA, vB */ 5156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* ecx gets shift count */ 5157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Need to spill edx */ 5158f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* rINSTw gets AA */ 5159f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5160f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5161f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax rINST 0 # eax<- v[AA+0] 5162f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 5163f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %edx rINST 1 # edx<- v[AA+1] 5164f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- vBB 5165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrdl %edx,%eax 5166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%edx 5167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testb $32,%cl 5168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je 2f 5169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %edx,%eax 5170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %edx,%edx 5171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project2: 5172f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %edx rINST 1 # v[AA+1]<- edx 5173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_USHR_LONG_2ADDR_finish 5174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_FLOAT_2ADDR: /* 0xc6 */ 5178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_FLOAT_2ADDR.S */ 5179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5187f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5188f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5189f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%ecx,4) # vAA to fp stack 5190f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5191f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fadds (rFP,rINST,4) # ex: faddp 5192f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5193f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5194f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # %st to vA 5195f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_FLOAT_2ADDR: /* 0xc7 */ 5201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_FLOAT_2ADDR.S */ 5202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5210f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5211f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5212f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%ecx,4) # vAA to fp stack 5213f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5214f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fsubs (rFP,rINST,4) # ex: faddp 5215f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5216f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5217f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # %st to vA 5218f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_FLOAT_2ADDR: /* 0xc8 */ 5224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_FLOAT_2ADDR.S */ 5225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5233f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5234f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5235f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%ecx,4) # vAA to fp stack 5236f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5237f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fmuls (rFP,rINST,4) # ex: faddp 5238f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5239f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5240f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # %st to vA 5241f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_FLOAT_2ADDR: /* 0xc9 */ 5247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_FLOAT_2ADDR.S */ 5248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5256f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5257f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5258f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,%ecx,4) # vAA to fp stack 5259f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5260f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fdivs (rFP,rINST,4) # ex: faddp 5261f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5262f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5263f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstps (rFP,%ecx,4) # %st to vA 5264f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_FLOAT_2ADDR: /* 0xca */ 5270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_FLOAT_2ADDR.S */ 5271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float/2addr vA, vB */ 5272f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5273f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5274f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee flds (rFP,rINST,4) # vBB to fp stack 5275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project flds (rFP,%ecx,4) # vAA to fp stack 5277f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 5279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 5280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 5281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 5282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 5283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 5284f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstps (rFP,%ecx,4) # %st to vA 5286f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_DOUBLE_2ADDR: /* 0xcb */ 5291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_DOUBLE_2ADDR.S */ 5292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5300f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5301f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5302f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%ecx,4) # vAA to fp stack 5303f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5304f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee faddl (rFP,rINST,4) # ex: faddp 5305f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5306f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5307f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # %st to vA 5308f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SUB_DOUBLE_2ADDR: /* 0xcc */ 5314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SUB_DOUBLE_2ADDR.S */ 5315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5323f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5324f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5325f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%ecx,4) # vAA to fp stack 5326f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5327f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fsubl (rFP,rINST,4) # ex: faddp 5328f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5329f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5330f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # %st to vA 5331f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_DOUBLE_2ADDR: /* 0xcd */ 5337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_DOUBLE_2ADDR.S */ 5338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5346f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5347f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5348f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%ecx,4) # vAA to fp stack 5349f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5350f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fmull (rFP,rINST,4) # ex: faddp 5351f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5352f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5353f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # %st to vA 5354f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_DOUBLE_2ADDR: /* 0xce */ 5360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_DOUBLE_2ADDR.S */ 5361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binflop2addr.S */ 5362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit binary float operation. 5364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-fp, sub-fp, mul-fp, div-fp 5366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/2addr vA, vB */ 5369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5370f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,%cl # ecx<- A 5371f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,%ecx,4) # vAA to fp stack 5372f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5373f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fdivl (rFP,rINST,4) # ex: faddp 5374f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5375f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5376f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fstpl (rFP,%ecx,4) # %st to vA 5377f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_DOUBLE_2ADDR: /* 0xcf */ 5383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_DOUBLE_2ADDR.S */ 5384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* rem_float/2addr vA, vB */ 5385f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzx rINSTbl,%ecx # ecx<- A+ 5386f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,rINST # rINST<- B 5387f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee fldl (rFP,rINST,4) # vBB to fp stack 5388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $0xf,%cl # ecx<- A 5389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fldl (rFP,%ecx,4) # vAA to fp stack 5390f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %edx 5391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 5392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fprem 5393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstsw %ax 5394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sahf 5395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jp 1b 5396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstp %st(1) 5397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 5398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fstpl (rFP,%ecx,4) # %st to vA 5399f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT16: /* 0xd0 */ 5404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_LIT16.S */ 5405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5416f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5418f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5420f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %ecx,%eax # for example: addl %ecx, %eax 5422f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5423f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5424f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5425f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT: /* 0xd1 */ 5431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RSUB_INT.S */ 5432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5443f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5445f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5447f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,%ecx # for example: addl %ecx, %eax 5449f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx rINST 5450f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5451f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5452f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT16: /* 0xd2 */ 5458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_LIT16.S */ 5459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul/lit16 vA, vB, #+CCCC */ 5460f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* Need A in rINST, ssssCCCC in ecx, vB in eax */ 5461f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5463f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5465f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5466f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull %ecx,%eax # trashes edx 5467f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5468f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5469f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5470f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT16: /* 0xd3 */ 5475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_LIT16.S */ 5476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit16.S */ 5477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 5479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 5480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit16 vA, vB, #+CCCC */ 5482f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* Need A in rINST, ssssCCCC in ecx, vB in eax */ 5483f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5484f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%eax # eax<- B 5485f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5486f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),%ecx # ecx<- ssssCCCC 5487f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT16_continue_div 5492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT16_continue_div 5494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 5495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_LIT16_finish_div 5496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT16: /* 0xd4 */ 5502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_LIT16.S */ 5503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit16.S */ 5504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 5506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 5507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit16 vA, vB, #+CCCC */ 5509f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee /* Need A in rINST, ssssCCCC in ecx, vB in eax */ 5510f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5511f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%eax # eax<- B 5512f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5513f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movswl 2(rPC),%ecx # ecx<- ssssCCCC 5514f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT16_continue_div 5519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT16_continue_div 5521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 5522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_LIT16_finish_div 5523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT16: /* 0xd5 */ 5529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_LIT16.S */ 5530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5541f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5543f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5545f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %ecx,%eax # for example: addl %ecx, %eax 5547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5548f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5549f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5550f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT16: /* 0xd6 */ 5556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_LIT16.S */ 5557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5568f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5570f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5572f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,%eax # for example: addl %ecx, %eax 5574f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5575f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5576f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5577f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT16: /* 0xd7 */ 5583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_LIT16.S */ 5584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit16.S */ 5585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit16" binary operation. Provide an "instr" line 5587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than eax, you can override "result".) 5590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit16, rsub-int, 5592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit16, or-int/lit16, xor-int/lit16 5593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit16 vA, vB, #+CCCC */ 5595f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- 000000BA 5596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%eax # eax<- B 5597f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vB 5598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movswl 2(rPC),%ecx # ecx<- ssssCCCC 5599f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xor %ecx,%eax # for example: addl %ecx, %eax 5601f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5602f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5603f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5604f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_ADD_INT_LIT8: /* 0xd8 */ 5610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_ADD_INT_LIT8.S */ 5611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5625f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl %ecx,%eax # ex: addl %ecx,%eax 5627f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5628f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5629f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5630f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_RSUB_INT_LIT8: /* 0xd9 */ 5636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_RSUB_INT_LIT8.S */ 5637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5651f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl %eax,%ecx # ex: addl %ecx,%eax 5653f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5654f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %ecx rINST 5655f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5656f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_MUL_INT_LIT8: /* 0xda */ 5662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_MUL_INT_LIT8.S */ 5663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul/lit8 vAA, vBB, #+CC */ 5664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5666f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5667f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull %ecx,%eax # trashes edx 5668f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5669f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5670f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5671f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_DIV_INT_LIT8: /* 0xdb */ 5676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_DIV_INT_LIT8.S */ 5677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit8.S */ 5678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit div/rem "lit8" binary operation. Handles special case of 5680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op0=minint & op1=-1 5681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit8 vAA, vBB, #+CC */ 5683f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 5684f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movsbl 3(rPC),%ecx # ecx<- ssssssCC 5685f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT8_continue_div 5690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_DIV_INT_LIT8_continue_div 5692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0x80000000,%eax 5693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_DIV_INT_LIT8_finish_div 5694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_REM_INT_LIT8: /* 0xdc */ 5700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_REM_INT_LIT8.S */ 5701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/bindivLit8.S */ 5702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit div/rem "lit8" binary operation. Handles special case of 5704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op0=minint & op1=-1 5705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/lit8 vAA, vBB, #+CC */ 5707f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 2(rPC),%eax # eax<- BB 5708f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movsbl 3(rPC),%ecx # ecx<- ssssssCC 5709f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx 5711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 5712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0x80000000,%eax 5713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT8_continue_div 5714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $-1,%ecx 5715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .LOP_REM_INT_LIT8_continue_div 5716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0,%edx 5717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .LOP_REM_INT_LIT8_finish_div 5718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_AND_INT_LIT8: /* 0xdd */ 5724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_AND_INT_LIT8.S */ 5725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5739f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl %ecx,%eax # ex: addl %ecx,%eax 5741f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5742f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5743f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5744f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_OR_INT_LIT8: /* 0xde */ 5750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_OR_INT_LIT8.S */ 5751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5765f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orl %ecx,%eax # ex: addl %ecx,%eax 5767f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5768f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5769f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5770f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_XOR_INT_LIT8: /* 0xdf */ 5776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_XOR_INT_LIT8.S */ 5777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5791f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xor %ecx,%eax # ex: addl %ecx,%eax 5793f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5795f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5796f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHL_INT_LIT8: /* 0xe0 */ 5802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHL_INT_LIT8.S */ 5803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5817f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sall %cl,%eax # ex: addl %ecx,%eax 5819f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5820f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5821f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5822f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_SHR_INT_LIT8: /* 0xe1 */ 5828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_SHR_INT_LIT8.S */ 5829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5843f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl %cl,%eax # ex: addl %ecx,%eax 5845f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5846f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5847f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5848f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_USHR_INT_LIT8: /* 0xe2 */ 5854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_USHR_INT_LIT8.S */ 5855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/binopLit8.S */ 5856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 5857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generic 32-bit "lit8" binary operation. Provide an "instr" line 5858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that specifies an instruction that performs "result = eax op ecx". 5859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This could be an x86 instruction or a function call. (If the result 5860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * comes back in a register other than r0, you can override "result".) 5861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * For: add-int/lit8, rsub-int/lit8 5863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and-int/lit8, or-int/lit8, xor-int/lit8, 5864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * shl-int/lit8, shr-int/lit8, ushr-int/lit8 5865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 5866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* binop/lit8 vAA, vBB, #+CC */ 5867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl 2(rPC),%eax # eax<- BB 5868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movsbl 3(rPC),%ecx # ecx<- ssssssCC 5869f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- rBB 5870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shrl %cl,%eax # ex: addl %ecx,%eax 5871f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5872f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5873f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5874f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 5875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5879c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IGET_VOLATILE: /* 0xe3 */ 58803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET_VOLATILE.S */ 58813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET.S */ 58823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 58833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit instance field get. 58843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 58853d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 58863d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 58873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vA, vB, field@CCCC */ 58889f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 5889f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 58909f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 5891f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5892f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 5893f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 5894f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5895f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 5896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 5897f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 5898f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_VOLATILE_finish # no, already resolved 5899f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 59009f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 59013d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IGET_VOLATILE_resolve 59023d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 59033d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5906c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IPUT_VOLATILE: /* 0xe4 */ 59073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT_VOLATILE.S */ 59083d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT.S */ 59093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 59103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 59113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit instance field put. 59123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 59133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iput, iput-object, iput-boolean, iput-byte, iput-char, iput-short 59143d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 59153d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vA, vB, field@CCCC */ 59169f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 5917f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # %edx<- 0000CCCC 59189f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 5919f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5920f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 5921f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 5922f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 5923f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 5924f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 5925f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 5926f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_VOLATILE_finish # no, already resolved 5927f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 59289f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 59293d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IPUT_VOLATILE_resolve 59303d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 59313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5934c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SGET_VOLATILE: /* 0xe5 */ 59353d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET_VOLATILE.S */ 59363d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET.S */ 59373d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 59383d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit SGET handler. 59393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 59403d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 59413d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 59423d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vAA, field@BBBB */ 59439f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 59443d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 59459f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 59463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 59473d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 59483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # resolved entry null? 59493d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je .LOP_SGET_VOLATILE_resolve # if not, make it so 59503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SGET_VOLATILE_finish: # field ptr in eax 59513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offStaticField_value(%eax),%eax 5952f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5953f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 5954f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 5955f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 59563d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 59573d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5960c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SPUT_VOLATILE: /* 0xe6 */ 59613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT_VOLATILE.S */ 59623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT.S */ 59633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 59643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit SPUT handler. 59653d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 59663d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 59673d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 59683d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vAA, field@BBBB */ 59699f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 59703d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 59719f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 59723d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 59733d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 59743d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # resolved entry null? 59753d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je .LOP_SPUT_VOLATILE_resolve # if not, make it so 59763d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SPUT_VOLATILE_finish: # field ptr in eax 5977f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx rINST 5978f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 5979f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 59803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,offStaticField_value(%eax) 5981f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 59823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 59833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 5984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 5985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 5986c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IGET_OBJECT_VOLATILE: /* 0xe7 */ 59873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET_OBJECT_VOLATILE.S */ 59883d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IGET.S */ 59893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 59903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit instance field get. 59913d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 59923d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short 59933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 59943d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vA, vB, field@CCCC */ 59959f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 5996f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 59979f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 5998f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 5999f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 6000f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 6001f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6002f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 6003f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 6004f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 6005f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IGET_OBJECT_VOLATILE_finish # no, already resolved 6006f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 60079f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 60083d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IGET_OBJECT_VOLATILE_resolve 60093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 60103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 6011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 60135387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_IGET_WIDE_VOLATILE: /* 0xe8 */ 60145387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 60159f601a917c8878204482c37aec7005054b6776fabuzbee SAVE_PC_FP_TO_SELF %ecx # leaves rSELF in %ecx 60169f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx,OUT_ARG0(%esp) # self is first arg to function 60175387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_IGET_WIDE_VOLATILE # do the real work 60189f601a917c8878204482c37aec7005054b6776fabuzbee mov rSELF,%ecx 60199f601a917c8878204482c37aec7005054b6776fabuzbee LOAD_PC_FP_FROM_SELF # retrieve updated values 6020f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 60215387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 6022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 60245387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_IPUT_WIDE_VOLATILE: /* 0xe9 */ 60255387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 60269f601a917c8878204482c37aec7005054b6776fabuzbee SAVE_PC_FP_TO_SELF %ecx # leaves rSELF in %ecx 60279f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx,OUT_ARG0(%esp) # self is first arg to function 60285387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_IPUT_WIDE_VOLATILE # do the real work 60299f601a917c8878204482c37aec7005054b6776fabuzbee mov rSELF,%ecx 60309f601a917c8878204482c37aec7005054b6776fabuzbee LOAD_PC_FP_FROM_SELF # retrieve updated values 6031f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 60325387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 6033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 60355387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_SGET_WIDE_VOLATILE: /* 0xea */ 60365387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 60379f601a917c8878204482c37aec7005054b6776fabuzbee SAVE_PC_FP_TO_SELF %ecx # leaves rSELF in %ecx 60389f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx,OUT_ARG0(%esp) # self is first arg to function 60395387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_SGET_WIDE_VOLATILE # do the real work 60409f601a917c8878204482c37aec7005054b6776fabuzbee mov rSELF,%ecx 60419f601a917c8878204482c37aec7005054b6776fabuzbee LOAD_PC_FP_FROM_SELF # retrieve updated values 6042f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 60435387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 6044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 60465387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden.L_OP_SPUT_WIDE_VOLATILE: /* 0xeb */ 60475387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden /* (stub) */ 60489f601a917c8878204482c37aec7005054b6776fabuzbee SAVE_PC_FP_TO_SELF %ecx # leaves rSELF in %ecx 60499f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx,OUT_ARG0(%esp) # self is first arg to function 60505387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden call dvmMterp_OP_SPUT_WIDE_VOLATILE # do the real work 60519f601a917c8878204482c37aec7005054b6776fabuzbee mov rSELF,%ecx 60529f601a917c8878204482c37aec7005054b6776fabuzbee LOAD_PC_FP_FROM_SELF # retrieve updated values 6053f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 60545387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden GOTO_NEXT 6055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 605796516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden.L_OP_BREAKPOINT: /* 0xec */ 605896516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden/* File: x86/OP_BREAKPOINT.S */ 6059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/unused.S */ 6060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_abort 6061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 60653a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden.L_OP_THROW_VERIFICATION_ERROR: /* 0xed */ 6066be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee/* File: x86/OP_THROW_VERIFICATION_ERROR.S */ 6067be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee /* 6068be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * Handle a throw-verification-error instruction. This throws an 6069be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * exception for an error discovered during verification. The 6070be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee * exception is indicated by AA, with some detail provided by BBBB. 6071be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee */ 6072be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee /* op AA, ref@BBBB */ 60739f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 6074be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movzwl 2(rPC),%eax # eax<- BBBB 60759f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 6076f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6077be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl %eax,OUT_ARG2(%esp) # arg2<- BBBB 6078f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,OUT_ARG1(%esp) # arg1<- AA 6079be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee movl %ecx,OUT_ARG0(%esp) # arg0<- method 6080be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee call dvmThrowVerificationError # call(method, kind, ref) 6081be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee jmp common_exceptionThrown # handle exception 6082be74aeb457df67355ce7c16721ecc436c8fd770aBill Buzbee 6083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_EXECUTE_INLINE: /* 0xee */ 6086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_EXECUTE_INLINE.S */ 6087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Execute a "native inline" instruction. 6089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We will be calling through a function table: 6091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (*gDvmInlineOpsTable[opIndex].func)(arg0, arg1, arg2, arg3, pResult) 6093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6094f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Ignores argument count - always loads 4. 6095f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * 6096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* [opt] execute-inline vAA, {vC, vD, vE, vF}, inline@BBBB */ 60989f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 6099f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 61019f601a917c8878204482c37aec7005054b6776fabuzbee leal offThread_retval(%ecx),%ecx # ecx<- & self->retval 6102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG4(%esp) 6103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call .LOP_EXECUTE_INLINE_continue # make call; will return after 6104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # successful? 6105f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 6106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown # no, handle exception 6107f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 6108f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6112b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden.L_OP_EXECUTE_INLINE_RANGE: /* 0xef */ 6113b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden /* (stub) */ 61149f601a917c8878204482c37aec7005054b6776fabuzbee SAVE_PC_FP_TO_SELF %ecx # leaves rSELF in %ecx 61159f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx,OUT_ARG0(%esp) # self is first arg to function 6116b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden call dvmMterp_OP_EXECUTE_INLINE_RANGE # do the real work 61179f601a917c8878204482c37aec7005054b6776fabuzbee mov rSELF,%ecx 61189f601a917c8878204482c37aec7005054b6776fabuzbee LOAD_PC_FP_FROM_SELF # retrieve updated values 6119f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 6120b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden GOTO_NEXT 6121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6123750d110b62cef538e193b6f91f5239b0c4b63ef1Andy McFadden.L_OP_INVOKE_OBJECT_INIT: /* 0xf0 */ 61246af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden /* (stub) */ 61259f601a917c8878204482c37aec7005054b6776fabuzbee SAVE_PC_FP_TO_SELF %ecx # leaves rSELF in %ecx 61269f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx,OUT_ARG0(%esp) # self is first arg to function 61276af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden call dvmMterp_OP_INVOKE_OBJECT_INIT # do the real work 61289f601a917c8878204482c37aec7005054b6776fabuzbee mov rSELF,%ecx 61299f601a917c8878204482c37aec7005054b6776fabuzbee LOAD_PC_FP_FROM_SELF # retrieve updated values 61306af2ddd107842c3737c04c37343cac9be17f4209Andy McFadden FETCH_INST 6131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 6132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6134291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden.L_OP_RETURN_VOID_BARRIER: /* 0xf1 */ 6135291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden /* (stub) */ 61369f601a917c8878204482c37aec7005054b6776fabuzbee SAVE_PC_FP_TO_SELF %ecx # leaves rSELF in %ecx 61379f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx,OUT_ARG0(%esp) # self is first arg to function 6138291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden call dvmMterp_OP_RETURN_VOID_BARRIER # do the real work 61399f601a917c8878204482c37aec7005054b6776fabuzbee mov rSELF,%ecx 61409f601a917c8878204482c37aec7005054b6776fabuzbee LOAD_PC_FP_FROM_SELF # retrieve updated values 6141f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 6142291758c5c4902900c6f86794ba8ab9cad9b26197Andy McFadden GOTO_NEXT 6143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_QUICK: /* 0xf2 */ 6146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */ 6147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-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 movl (%ecx,%eax,1),%eax 6156f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6157f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6158f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6159f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST # fp[A]<- result 6160f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_WIDE_QUICK: /* 0xf3 */ 6165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_WIDE_QUICK.S */ 6166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-wide-quick */ 6167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6168f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 6169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6170f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # vB (object we're operating on) 6171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 6172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 6173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%eax # eax<- address of 64-bit source 6175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax),%ecx # ecx<- lsw 6176f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4(%eax),%eax # eax<- msw 6177f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6178f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6179f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %ecx rINST 0 # v[A+0]<- lsw 6180f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG_WORD %eax rINST 1 # v[A+1]<- msw 6181f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6182f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IGET_OBJECT_QUICK: /* 0xf4 */ 6187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_OBJECT_QUICK.S */ 6188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IGET_QUICK.S */ 6189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iget-quick, iget-object-quick */ 6190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6191f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 6192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6193f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # vB (object we're operating on) 6194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 6195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $0,%ecx # is object null? 6196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,1),%eax 6198f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6199f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6200f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6201f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST # fp[A]<- result 6202f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 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_QUICK: /* 0xf5 */ 6208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_QUICK.S */ 62093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* For: iput-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) 6214f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6215f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST,rINST # rINST<- v[A] 6216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 6217f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %ecx,%ecx # is object null? 6218f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6220f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,(%ecx,%eax,1) 6221f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6222f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_WIDE_QUICK: /* 0xf6 */ 6227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_WIDE_QUICK.S */ 6228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* For: iput-wide-quick */ 6229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6230f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 6231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6232f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # vB (object we're operating on) 6233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 6234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %ecx,%ecx # is object null? 6235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (%ecx,%eax,1),%ecx # ecx<- Address of 64-bit target 6237f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6238f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD %eax rINST 0 # eax<- lsw 6239f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_WORD rINST rINST 1 # rINST<- msw 6240f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,(%ecx) 6242f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,4(%ecx) 6243f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6244f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_IPUT_OBJECT_QUICK: /* 0xf7 */ 6249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_IPUT_OBJECT_QUICK.S */ 62503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* For: iput-object-quick */ 6251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vA, vB, offset@CCCC */ 6252f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 6253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $4,%ecx # ecx<- B 6254f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # vB (object we're operating on) 6255f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6256f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R rINST rINST # rINST<- v[A] 6257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field byte offset 62583d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %ecx,%ecx # is object null? 6259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject 6260f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,(%ecx,%eax,1) 62619f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 62623d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IPUT_OBJECT_QUICK_finish 6263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK: /* 0xf8 */ 6267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */ 6268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 6270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 6272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 6276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 6279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6280f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vC ("this" ptr) 6281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yep, throw exception 6283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- thisPtr->clazz 6284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable 6285f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # might throw later - get ready 6286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[BBBB] 6287c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 6288c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 6289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_VIRTUAL_QUICK_RANGE: /* 0xf9 */ 6292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK_RANGE.S */ 6293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_VIRTUAL_QUICK.S */ 6294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized virtual method call. 6296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-virtual-quick, invoke-virtual-quick/range 6298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 6301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- FEDC or CCCC 6302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 6303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- C (or stays CCCC) 6305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6306f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- vC ("this" ptr) 6307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null? 6308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # yep, throw exception 6309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offObject_clazz(%eax),%eax # eax<- thisPtr->clazz 6310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%eax),%eax # eax<- thisPtr->clazz->vtable 6311f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # might throw later - get ready 6312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%eax,%ecx,4),%eax # eax<- vtable[BBBB] 6313c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 6314c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 6315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK: /* 0xfa */ 6319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */ 6320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 6322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 6324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 63279f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 6328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 63299f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 6330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!0) 6331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- D (or stays CCCC) 6332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6334f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- "this" 6335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super 6336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null "this"? 6337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # "this" is null, throw exception 6338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- vtable 6340f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- super->vtable[BBBB] 6342c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodNoRange 6343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L_OP_INVOKE_SUPER_QUICK_RANGE: /* 0xfb */ 6347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK_RANGE.S */ 6348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/OP_INVOKE_SUPER_QUICK.S */ 6349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Handle an optimized "super" method call. 6351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: [opt] invoke-super-quick, invoke-super-quick/range 6353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 6355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 63569f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 6357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 4(rPC),%eax # eax<- GFED or CCCC 63589f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 6359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .if (!1) 6360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andl $0xf,%eax # eax<- D (or stays CCCC) 6361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .endif 6362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 6363f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %eax %eax # eax<- "this" 6364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super 6365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # null "this"? 6366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errNullObject # "this" is null, throw exception 6367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 6368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_vtable(%ecx),%ecx # ecx<- vtable 6369f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 6370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- super->vtable[BBBB] 6371c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_invokeMethodRange 6372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6376c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_IPUT_OBJECT_VOLATILE: /* 0xfc */ 63773d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT_OBJECT_VOLATILE.S */ 63783d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_IPUT_OBJECT.S */ 63793d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 63803d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Object field put. 63813d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 63823d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: iput-object 63833d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 63843d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vA, vB, field@CCCC */ 63859f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 6386f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzwl 2(rPC),%edx # edx<- 0000CCCC 63879f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 6388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- BA 6389f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $4,%ecx # ecx<- B 6390f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 6391f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andb $0xf,rINSTbl # rINST<- A 6392f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx # ecx<- fp[B], the object ptr 6393f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (%eax,%edx,4),%eax # resolved entry 6394f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # is resolved entry null? 6395f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee jne .LOP_IPUT_OBJECT_VOLATILE_finish # no, already resolved 6396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG1(%esp) 63979f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 63983d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_IPUT_OBJECT_VOLATILE_resolve 63993d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 64003d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 6401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6403c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SGET_OBJECT_VOLATILE: /* 0xfd */ 64043d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET_OBJECT_VOLATILE.S */ 64053d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SGET.S */ 64063d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 64073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * General 32-bit SGET handler. 64083d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * 64093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short 64103d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 64113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vAA, field@BBBB */ 64129f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 64133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 64149f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 64153d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 64163d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 64173d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # resolved entry null? 64183d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je .LOP_SGET_OBJECT_VOLATILE_resolve # if not, make it so 64193d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee.LOP_SGET_OBJECT_VOLATILE_finish: # field ptr in eax 64203d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offStaticField_value(%eax),%eax 6421f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 2 %edx 6422f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 6423f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 6424f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 64253d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 64263d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 6427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 6429c35a2ef53d0cccd6f924eeba36633220ec67c32eAndy McFadden.L_OP_SPUT_OBJECT_VOLATILE: /* 0xfe */ 64303d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT_OBJECT_VOLATILE.S */ 64313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee/* File: x86/OP_SPUT_OBJECT.S */ 64323d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 64333d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * SPUT object handler. 64343d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 64353d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* op vAA, field@BBBB */ 64369f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 64373d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movzwl 2(rPC),%eax # eax<- field ref BBBB 64389f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 64393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 64403d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl (%ecx,%eax,4),%eax # eax<- resolved StaticField 64413d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax # resolved entry null? 64423d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je .LOP_SPUT_OBJECT_VOLATILE_resolve # if not, make it so 6443d3b0a4bf6b2e38e6e9e80e203ca753e941084103buzbee.LOP_SPUT_OBJECT_VOLATILE_finish: # field ptr in eax 6444f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%ecx # ecx<- AA 6445f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GET_VREG_R %ecx %ecx 64463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp .LOP_SPUT_OBJECT_VOLATILE_continue 64473d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 64483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 6449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* ------------------------------ */ 6450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 645190f15431b24a4004fab2db70f273155fcd1c42a4Dan Bornstein.L_OP_DISPATCH_FF: /* 0xff */ 645290f15431b24a4004fab2db70f273155fcd1c42a4Dan Bornstein/* File: x86/OP_DISPATCH_FF.S */ 645371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal 256(rINST),%edx 645471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_JUMBO_R %edx 6455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 645671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 6457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .balign 64 645871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_CONST_CLASS_JUMBO: /* 0x100 */ 645971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_CONST_CLASS_JUMBO.S */ 646071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* const-class/jumbo vBBBB, Class@AAAAAAAA */ 64619f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 646271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- AAAAAAAA 64639f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx# ecx<- self->methodClassDex 646471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- dvmDex->pResClasses 646571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- rResClasses[AAAAAAAA] 646671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 646771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved yet? 646871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_CONST_CLASS_JUMBO_resolve 646971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST # vBBBB<- rResClasses[AAAAAAAA] 647071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 6471f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 647371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 647471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 647571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_CHECK_CAST_JUMBO: /* 0x101 */ 647671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_CHECK_CAST_JUMBO.S */ 647771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 647871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Check to see if a cast from one class to another is allowed. 647971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 648071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* check-cast/jumbo vBBBB, class@AAAAAAAA */ 64819f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 648271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST,rINST # rINST<- vBBBB (object) 648371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- AAAAAAAA 64849f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 648571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl rINST,rINST # is oject null? 648671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 648771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_CHECK_CAST_JUMBO_okay # null obj, cast always succeeds 648871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved class 648971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(rINST),%ecx # ecx<- obj->clazz 649071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # have we resolved this before? 649171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_CHECK_CAST_JUMBO_resolve # no, go do it now 649271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_JUMBO_resolved: 649371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpl %eax,%ecx # same class (trivial success)? 649471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_CHECK_CAST_JUMBO_fullcheck # no, do full check 649571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_JUMBO_okay: 649671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 649771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 6498f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 6499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 650071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 650171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 650271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INSTANCE_OF_JUMBO: /* 0x102 */ 650371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_INSTANCE_OF_JUMBO.S */ 650471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 650571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Check to see if an object reference is an instance of a class. 650671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 650771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Most common situation is a non-null object, being compared against 650871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * an already-resolved class. 650971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 651071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* instance-of/jumbo vBBBB, vCCCC, class@AAAAAAAA */ 651171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%eax # eax<- CCCC 651271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %eax %eax # eax<- vCCCC (obj) 65139f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 651471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # object null? 65159f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 651671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_INSTANCE_OF_JUMBO_store # null obj, not instance, store it 651771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 651871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 651971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%edx,4),%ecx # ecx<- resolved class 652071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(%eax),%eax # eax<- obj->clazz 652171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # have we resolved this before? 652271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_INSTANCE_OF_JUMBO_resolve # not resolved, do it now 652371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_resolved: # eax<- obj->clazz, ecx<- resolved class 652471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpl %eax,%ecx # same class (trivial success)? 652571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_INSTANCE_OF_JUMBO_trivial # yes, trivial finish 652671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_INSTANCE_OF_JUMBO_fullcheck # no, do full check 6527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 652871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 652971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 653071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_NEW_INSTANCE_JUMBO: /* 0x103 */ 653171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_NEW_INSTANCE_JUMBO.S */ 6532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 653371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Create a new instance of a class. 6534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 653571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* new-instance/jumbo vBBBB, class@AAAAAAAA */ 65369f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 653771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- AAAAAAAA 65389f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 653971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 6540f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 654171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%ecx # ecx<- resolved class 654271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # resolved? 654371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_NEW_INSTANCE_JUMBO_resolve # no, go do it 654471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_resolved: # on entry, ecx<- class 654571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpb $CLASS_INITIALIZED,offClassObject_status(%ecx) 654671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_NEW_INSTANCE_JUMBO_initialized 654771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_NEW_INSTANCE_JUMBO_needinit 6548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 654971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 655071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 655171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_NEW_ARRAY_JUMBO: /* 0x104 */ 655271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_NEW_ARRAY_JUMBO.S */ 6553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 655471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Allocate an array of objects, specified with the array class 655571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * and a count. 6556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 655771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * The verifier guarantees that this is an array class, so we don't 655871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * check for it here. 6559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 656071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* new-array/jumbo vBBBB, vCCCC, class@AAAAAAAA */ 65619f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 6562f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 65639f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 656471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- AAAAAAAA 656571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- pDvmDex->pResClasses 656671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%ecx # ecx<- resolved class 656771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%eax # eax<- CCCC 656871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %eax %eax # eax<- vCCCC (array length) 656971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 657071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao js common_errNegativeArraySize # bail 657171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # already resolved? 657271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_NEW_ARRAY_JUMBO_finish # yes, fast path 657371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_NEW_ARRAY_JUMBO_resolve # resolve now 6574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 657571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 657671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 657771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_FILLED_NEW_ARRAY_JUMBO: /* 0x105 */ 657871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_FILLED_NEW_ARRAY_JUMBO.S */ 6579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 658071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Create a new array with elements filled from registers. 6581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 658271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* filled-new-array/jumbo {vCCCC..v(CCCC+BBBB-1)}, type@AAAAAAAA */ 65839f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 65849f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%eax),%eax # eax<- pDvmDex 658571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%ecx # ecx<- AAAAAAAA 658671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResClasses(%eax),%eax # eax<- pDvmDex->pResClasses 658771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%ecx,4),%eax # eax<- resolved class 658871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 658971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # already resolved? 659071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_FILLED_NEW_ARRAY_JUMBO_continue # yes, continue 659171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao # less frequent path, so we'll redo some work 65929f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 659371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,OUT_ARG2(%esp) # arg2<- false 659471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) # arg1<- AAAAAAAA 65959f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%eax),%eax # eax<- self->method 659671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_FILLED_NEW_ARRAY_JUMBO_more 6597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 659871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 659971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 660071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_JUMBO: /* 0x106 */ 660171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_JUMBO.S */ 6602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 660371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit instance field get. 660471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 660571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo, 660671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * iget-char/jumbo, iget-short/jumbo 6607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 660871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, vCCCC, field@AAAAAAAA */ 66099f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 661071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 66119f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 661271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 661371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 661471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 661571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 661671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 661771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_JUMBO_finish # no, already resolved 661871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 66199f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 662071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IGET_JUMBO_resolve 6621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 662271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 662371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 662471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_WIDE_JUMBO: /* 0x107 */ 662571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_WIDE_JUMBO.S */ 6626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 662771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 64-bit instance field get. 6628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 662971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* iget-wide/jumbo vBBBB, vCCCC, field@AAAA */ 66309f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 663171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 66329f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 663371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 663471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 663571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 663671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 663771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 663871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_WIDE_JUMBO_finish # no, already resolved 663971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) # for dvmResolveInstField 66409f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 664171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IGET_WIDE_JUMBO_resolve 664271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 664371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 664471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 664571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_OBJECT_JUMBO: /* 0x108 */ 664671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_OBJECT_JUMBO.S */ 664771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_JUMBO.S */ 664871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 664971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit instance field get. 6650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 665171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo, 665271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * iget-char/jumbo, iget-short/jumbo 6653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 665471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, vCCCC, field@AAAAAAAA */ 66559f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 665671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 66579f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 665871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 665971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 666071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 666171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 666271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 666371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_OBJECT_JUMBO_finish # no, already resolved 666471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 66659f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 666671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IGET_OBJECT_JUMBO_resolve 6667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 666971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 667071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 667171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_BOOLEAN_JUMBO: /* 0x109 */ 667271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_BOOLEAN_JUMBO.S */ 667371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_JUMBO.S */ 6674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 667571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit instance field get. 6676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 667771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo, 667871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * iget-char/jumbo, iget-short/jumbo 6679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 668071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, vCCCC, field@AAAAAAAA */ 66819f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 668271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 66839f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 668471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 668571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 668671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 668771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 668871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 668971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_BOOLEAN_JUMBO_finish # no, already resolved 669071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 66919f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 669271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IGET_BOOLEAN_JUMBO_resolve 6693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 669471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 669571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 669671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 669771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_BYTE_JUMBO: /* 0x10a */ 669871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_BYTE_JUMBO.S */ 669971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_JUMBO.S */ 6700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 670171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit instance field get. 6702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 670371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo, 670471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * iget-char/jumbo, iget-short/jumbo 6705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 670671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, vCCCC, field@AAAAAAAA */ 67079f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 670871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 67099f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 671071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 671171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 671271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 671371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 671471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 671571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_BYTE_JUMBO_finish # no, already resolved 671671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 67179f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 671871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IGET_BYTE_JUMBO_resolve 6719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 672071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 672171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 672271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 672371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_CHAR_JUMBO: /* 0x10b */ 672471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_CHAR_JUMBO.S */ 672571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_JUMBO.S */ 6726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 672771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit instance field get. 6728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 672971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo, 673071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * iget-char/jumbo, iget-short/jumbo 6731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 673271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, vCCCC, field@AAAAAAAA */ 67339f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 673471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 67359f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 673671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 673771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 673871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 673971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 674071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 674171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_CHAR_JUMBO_finish # no, already resolved 674271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 67439f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 674471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IGET_CHAR_JUMBO_resolve 6745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 674771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 674871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 674971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IGET_SHORT_JUMBO: /* 0x10c */ 675071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_SHORT_JUMBO.S */ 675171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IGET_JUMBO.S */ 6752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 675371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit instance field get. 675471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 675571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: iget/jumbo, iget-object/jumbo, iget-boolean/jumbo, iget-byte/jumbo, 675671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * iget-char/jumbo, iget-short/jumbo 6757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 675871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, vCCCC, field@AAAAAAAA */ 67599f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 676071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 67619f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 676271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 676371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 676471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 676571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 676671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 676771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_SHORT_JUMBO_finish # no, already resolved 676871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) # needed by dvmResolveInstField 67699f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 677071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IGET_SHORT_JUMBO_resolve 677171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 6772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 677371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 677471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 677571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_JUMBO: /* 0x10d */ 677671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_JUMBO.S */ 6777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 677871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit instance field put. 6779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 678071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: iput/jumbo, iput-object/jumbo, iput-boolean/jumbo, iput-byte/jumbo, 678171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao iput-char/jumbo, iput-short/jumbo 6782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 678371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, vCCCC, field@AAAAAAAA */ 67849f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 678571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 67869f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 678771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 678871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 678971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 679071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 679171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 679271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_JUMBO_finish # no, already resolved 679371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) 67949f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 679571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IPUT_JUMBO_resolve 6796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 679771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 679871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 679971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_WIDE_JUMBO: /* 0x10e */ 680071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_WIDE_JUMBO.S */ 680171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 680271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 64-bit instance field put. 680371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 680471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* iput-wide/jumbo vBBBB, vCCCC, field@AAAAAAAA */ 68059f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 680671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 68079f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 680871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 680971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 681071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 681171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 681271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 681371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_WIDE_JUMBO_finish # no, already resolved 681471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) 68159f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 681671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IPUT_WIDE_JUMBO_resolve 6817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 681871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 681971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 682071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_OBJECT_JUMBO: /* 0x10f */ 682171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_OBJECT_JUMBO.S */ 682271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 682371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo object field put. 682471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 682571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* iput-object/jumbo vBBBB, vCCCC, field@AAAAAAAA */ 68269f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 682771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 68289f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 682971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 683071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 683171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 683271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 683371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 683471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_OBJECT_JUMBO_finish # no, already resolved 683571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) 68369f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 683771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IPUT_OBJECT_JUMBO_resolve 683871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 683971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 684071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 684171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_BOOLEAN_JUMBO: /* 0x110 */ 684271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_BOOLEAN_JUMBO.S */ 684371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_JUMBO.S */ 684471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 684571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit instance field put. 684671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 684771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: iput/jumbo, iput-object/jumbo, iput-boolean/jumbo, iput-byte/jumbo, 684871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao iput-char/jumbo, iput-short/jumbo 684971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 685071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, vCCCC, field@AAAAAAAA */ 68519f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 685271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 68539f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 685471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 685571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 685671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 685771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 685871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 685971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_BOOLEAN_JUMBO_finish # no, already resolved 686071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) 68619f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 686271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IPUT_BOOLEAN_JUMBO_resolve 6863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 686571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 686671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 686771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_BYTE_JUMBO: /* 0x111 */ 686871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_BYTE_JUMBO.S */ 686971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_JUMBO.S */ 6870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 687171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit instance field put. 687271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 687371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: iput/jumbo, iput-object/jumbo, iput-boolean/jumbo, iput-byte/jumbo, 687471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao iput-char/jumbo, iput-short/jumbo 6875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 687671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, vCCCC, field@AAAAAAAA */ 68779f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 687871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 68799f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 688071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 688171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 688271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 688371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 688471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 688571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_BYTE_JUMBO_finish # no, already resolved 688671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) 68879f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 688871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IPUT_BYTE_JUMBO_resolve 6889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 689171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 689271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 689371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_CHAR_JUMBO: /* 0x112 */ 689471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_CHAR_JUMBO.S */ 689571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_JUMBO.S */ 689671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 689771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit instance field put. 689871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 689971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: iput/jumbo, iput-object/jumbo, iput-boolean/jumbo, iput-byte/jumbo, 690071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao iput-char/jumbo, iput-short/jumbo 690171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 690271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, vCCCC, field@AAAAAAAA */ 69039f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 690471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 69059f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 690671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 690771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 690871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 690971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 691071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 691171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_CHAR_JUMBO_finish # no, already resolved 691271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) 69139f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 691471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IPUT_CHAR_JUMBO_resolve 6915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 691771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 691871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 691971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_IPUT_SHORT_JUMBO: /* 0x113 */ 692071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_SHORT_JUMBO.S */ 692171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_IPUT_JUMBO.S */ 6922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 692371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit instance field put. 692471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 692571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: iput/jumbo, iput-object/jumbo, iput-boolean/jumbo, iput-byte/jumbo, 692671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao iput-char/jumbo, iput-short/jumbo 6927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 692871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, vCCCC, field@AAAAAAAA */ 69299f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 693071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%edx # edx<- AAAAAAAA 69319f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- DvmDex 693271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 693371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%eax),%eax # eax<- pDvmDex->pResFields 693471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- fp[CCCC], the object ptr 693571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%edx,4),%eax # resolved entry 693671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # is resolved entry null? 693771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_SHORT_JUMBO_finish # no, already resolved 693871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) 69399f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx 694071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_IPUT_SHORT_JUMBO_resolve 6941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 6942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 694371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 694471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 694571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_JUMBO: /* 0x114 */ 694671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_JUMBO.S */ 694771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 694871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit SGET handler. 694971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 695071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo, 695171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * sget-char/jumbo, sget-short/jumbo 695271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 695371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, field@AAAAAAAA */ 69549f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 69559f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 695671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 695771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 695871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 695971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 696071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SGET_JUMBO_resolve # if not, make it so 696171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_JUMBO_finish: # field ptr in eax 696271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offStaticField_value(%eax),%eax 696371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 696471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 696571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 696671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 6967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 696871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 696971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 697071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_WIDE_JUMBO: /* 0x115 */ 697171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_WIDE_JUMBO.S */ 6972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 697371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 64-bit SGET handler. 697471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 6975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 697671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* sget-wide/jumbo vBBBB, field@AAAAAAAA */ 69779f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 69789f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 697971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 698071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 698171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 698271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 698371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SGET_WIDE_JUMBO_resolve # if not, make it so 698471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_WIDE_JUMBO_finish: # field ptr in eax 698571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offStaticField_value(%eax),%ecx # ecx<- lsw 698671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 4+offStaticField_value(%eax),%eax # eax<- msw 698771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 698871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 698971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %ecx rINST 0 699071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 1 699171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 6992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 699371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 699471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 699571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_OBJECT_JUMBO: /* 0x116 */ 699671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_OBJECT_JUMBO.S */ 699771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_JUMBO.S */ 699871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 699971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit SGET handler. 700071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 700171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo, 700271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * sget-char/jumbo, sget-short/jumbo 700371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 700471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, field@AAAAAAAA */ 70059f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 70069f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 700771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 700871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 700971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 701071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 701171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SGET_OBJECT_JUMBO_resolve # if not, make it so 701271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_OBJECT_JUMBO_finish: # field ptr in eax 701371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offStaticField_value(%eax),%eax 701471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 701571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 701671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 701771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 7018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 702071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 702171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 702271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_BOOLEAN_JUMBO: /* 0x117 */ 702371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_BOOLEAN_JUMBO.S */ 702471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_JUMBO.S */ 702571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 702671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit SGET handler. 702771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 702871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo, 702971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * sget-char/jumbo, sget-short/jumbo 703071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 703171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, field@AAAAAAAA */ 70329f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 70339f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 703471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 703571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 703671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 703771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 703871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SGET_BOOLEAN_JUMBO_resolve # if not, make it so 703971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BOOLEAN_JUMBO_finish: # field ptr in eax 704071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offStaticField_value(%eax),%eax 704171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 704271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 704371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 7044f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 704771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 704871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 704971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_BYTE_JUMBO: /* 0x118 */ 705071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_BYTE_JUMBO.S */ 705171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_JUMBO.S */ 7052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 705371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit SGET handler. 705471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 705571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo, 705671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * sget-char/jumbo, sget-short/jumbo 7057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 705871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, field@AAAAAAAA */ 70599f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 70609f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 706171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 706271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 706371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 706471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 706571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SGET_BYTE_JUMBO_resolve # if not, make it so 706671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BYTE_JUMBO_finish: # field ptr in eax 706771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offStaticField_value(%eax),%eax 706871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 706971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 707071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 707171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 7072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 707471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 707571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 707671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_CHAR_JUMBO: /* 0x119 */ 707771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_CHAR_JUMBO.S */ 707871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_JUMBO.S */ 707971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 708071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit SGET handler. 708171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 708271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo, 708371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * sget-char/jumbo, sget-short/jumbo 708471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 708571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, field@AAAAAAAA */ 70869f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 70879f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 708871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 708971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 709071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 709171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 709271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SGET_CHAR_JUMBO_resolve # if not, make it so 709371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_CHAR_JUMBO_finish: # field ptr in eax 709471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offStaticField_value(%eax),%eax 709571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 709671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 709771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 709871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 7099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 710171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 710271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 710371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SGET_SHORT_JUMBO: /* 0x11a */ 710471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_SHORT_JUMBO.S */ 710571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SGET_JUMBO.S */ 710671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 710771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit SGET handler. 710871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 710971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo, 711071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * sget-char/jumbo, sget-short/jumbo 711171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 711271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, field@AAAAAAAA */ 71139f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 71149f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 711571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 711671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 711771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 711871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 711971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SGET_SHORT_JUMBO_resolve # if not, make it so 712071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_SHORT_JUMBO_finish: # field ptr in eax 712171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offStaticField_value(%eax),%eax 712271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 712371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 712471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 7125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 712871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 712971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 713071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_JUMBO: /* 0x11b */ 713171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_JUMBO.S */ 713271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 713371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit SPUT handler. 713471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 713571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo, 713671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * sput-short/jumbo 713771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 713871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, field@AAAAAAAA */ 71399f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 71409f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 714171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 714271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 714371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 714471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 714571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SPUT_JUMBO_resolve # if not, make it so 714671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_JUMBO_finish: # field ptr in eax 714771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx rINST 714871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 714971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 715071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,offStaticField_value(%eax) 7151f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 715371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 715471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 715571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_WIDE_JUMBO: /* 0x11c */ 715671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_WIDE_JUMBO.S */ 715771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 715871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 64-bit SPUT handler. 715971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 716071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* sput-wide/jumbo vBBBB, field@AAAAAAAA */ 71619f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 71629f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 716371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 716471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 716571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 716671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 716771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SPUT_WIDE_JUMBO_resolve # if not, make it so 716871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_WIDE_JUMBO_finish: # field ptr in eax 716971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD %ecx rINST 0 # ecx<- lsw 717071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD rINST rINST 1 # rINST<- msw 717171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 717271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 717371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,offStaticField_value(%eax) 717471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,4+offStaticField_value(%eax) 7175f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 717771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 717871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 717971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_OBJECT_JUMBO: /* 0x11d */ 718071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_OBJECT_JUMBO.S */ 718171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 718271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo SPUT object handler. 7183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 718471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* sput-object/jumbo vBBBB, field@AAAAAAAA */ 71859f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 718671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 71879f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 718871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 718971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField 719071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 719171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SPUT_OBJECT_JUMBO_resolve # if not, make it so 719271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_JUMBO_finish: # field ptr in eax 719371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx rINST 719471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_SPUT_OBJECT_JUMBO_continue 7195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 719671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 719771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 719871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_BOOLEAN_JUMBO: /* 0x11e */ 719971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_BOOLEAN_JUMBO.S */ 720071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_JUMBO.S */ 720171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 720271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit SPUT handler. 720371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 720471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo, 720571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * sput-short/jumbo 720671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 720771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, field@AAAAAAAA */ 72089f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 72099f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 721071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 721171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 721271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 721371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 721471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SPUT_BOOLEAN_JUMBO_resolve # if not, make it so 721571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BOOLEAN_JUMBO_finish: # field ptr in eax 721671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx rINST 721771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 721871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 721971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,offStaticField_value(%eax) 7220f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 722371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 722471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 722571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_BYTE_JUMBO: /* 0x11f */ 722671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_BYTE_JUMBO.S */ 722771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_JUMBO.S */ 7228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 722971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit SPUT handler. 723071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 723171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo, 723271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * sput-short/jumbo 7233f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 723471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, field@AAAAAAAA */ 72359f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 72369f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 723771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 723871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 723971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 724071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 724171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SPUT_BYTE_JUMBO_resolve # if not, make it so 724271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BYTE_JUMBO_finish: # field ptr in eax 724371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx rINST 724471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 724571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 724671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,offStaticField_value(%eax) 7247f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 725071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 725171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 725271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_CHAR_JUMBO: /* 0x120 */ 725371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_CHAR_JUMBO.S */ 725471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_JUMBO.S */ 7255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 725671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit SPUT handler. 725771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 725871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo, 725971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * sput-short/jumbo 7260f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 726171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, field@AAAAAAAA */ 72629f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 72639f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 726471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 726571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 726671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 726771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 726871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SPUT_CHAR_JUMBO_resolve # if not, make it so 726971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_CHAR_JUMBO_finish: # field ptr in eax 727071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx rINST 727171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 727271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 727371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,offStaticField_value(%eax) 7274f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 7275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 727771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 727871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 727971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_SPUT_SHORT_JUMBO: /* 0x121 */ 728071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_SHORT_JUMBO.S */ 728171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_SPUT_JUMBO.S */ 728271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 728371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Jumbo 32-bit SPUT handler. 728471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 728571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo, 728671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * sput-short/jumbo 728771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 728871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop vBBBB, field@AAAAAAAA */ 72899f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 72909f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 729171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 729271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 729371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 729471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # resolved entry null? 729571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_SPUT_SHORT_JUMBO_resolve # if not, make it so 729671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_SHORT_JUMBO_finish: # field ptr in eax 729771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx rINST 729871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 729971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 730071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,offStaticField_value(%eax) 730171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 7302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 730471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 730571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 730671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_VIRTUAL_JUMBO: /* 0x122 */ 730771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_INVOKE_VIRTUAL_JUMBO.S */ 7308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 730971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Handle a jumbo virtual method call. 7310f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 731171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* invoke-virtual/jumbo vBBBB, {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */ 73129f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 731371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%ecx # ecx<- AAAAAAAA 73149f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%eax),%eax # eax<- pDvmDex 7315f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 731671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResMethods(%eax),%eax # eax<- pDvmDex->pResMethods 731771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%ecx,4),%eax # eax<- resolved baseMethod 731871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # already resolved? 731971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_INVOKE_VIRTUAL_JUMBO_continue # yes, continue 73209f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 732171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) # arg1<- ref 73229f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%eax),%eax # eax<- self->method 732371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_INVOKE_VIRTUAL_JUMBO_more 7324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 732571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 732671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 732771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_SUPER_JUMBO: /* 0x123 */ 732871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_INVOKE_SUPER_JUMBO.S */ 7329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 733071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Handle a jumbo "super" method call. 7331f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 733271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* invoke-super/jumbo {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */ 73339f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,rINST 733471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- AAAAAAAA 73359f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(rINST),%ecx # ecx<- pDvmDex 733671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 733771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 733871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%ecx # ecx<- resolved baseMethod 73399f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(rINST),%eax # eax<- method 734071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),rINST # rINST<- CCCC 734171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- "this" ptr 734271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl rINST,rINST # null "this"? 734371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # yes, throw 734471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%eax),%eax # eax<- method->clazz 734571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # already resolved? 734671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_INVOKE_SUPER_JUMBO_continue # yes - go on 734771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_INVOKE_SUPER_JUMBO_resolve 7348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 734971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 735071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 735171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_DIRECT_JUMBO: /* 0x124 */ 735271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_INVOKE_DIRECT_JUMBO.S */ 735371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 735471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Handle a jumbo direct method call. 735571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 735671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * (We could defer the "is 'this' pointer null" test to the common 735771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * method invocation code, and use a flag to indicate that static 735871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * calls don't count. If we do this as part of copying the arguments 735971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * out we could avoiding loading the first arg twice.) 736071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 736171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* invoke-direct/jumbo {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */ 73629f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 736371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- AAAAAAAA 73649f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 736571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 736671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 736771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%edx # edx<- CCCC 736871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 736971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # already resolved? 737071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %edx # ecx<- "this" ptr 737171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_INVOKE_DIRECT_JUMBO_resolve # not resolved, do it now 737271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_DIRECT_JUMBO_finish: 737371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # null "this"? 737471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne common_invokeMethodJumbo # no, continue on 737571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_errNullObject 7376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 737771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 737871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 737971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_STATIC_JUMBO: /* 0x125 */ 738071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_INVOKE_STATIC_JUMBO.S */ 738171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 738271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Handle a jumbo static method call. 738371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 738471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* invoke-static/jumbo {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */ 73859f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 738671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- AAAAAAAA 73879f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 7388f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 738971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 739071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 739171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 739271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne common_invokeMethodJumbo 73939f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 73949f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 739571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- AAAAAAAA 739671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 739771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) # arg1<- AAAAAAAA 739871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 739971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_INVOKE_STATIC_JUMBO_continue 7400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 740171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 740271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 740371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_INVOKE_INTERFACE_JUMBO: /* 0x126 */ 740471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_INVOKE_INTERFACE_JUMBO.S */ 7405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 740671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Handle a jumbo interface method call. 7407f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 740871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* invoke-interface/jumbo {vCCCC..v(CCCC+BBBB-1)}, meth@AAAAAAAA */ 740971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%eax # eax<- CCCC 74109f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 741171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %eax %eax # eax<- "this" 741271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 741371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # null this? 741471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # yes, fail 741571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(%eax),%eax# eax<- thisPtr->clazz 741671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- class 74179f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%eax # eax<- methodClassDex 74189f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- method 741971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG3(%esp) # arg3<- dex 742071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- AAAAAAAA 742171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG2(%esp) # arg2<- method 742271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) # arg1<- AAAAAAAA 742371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_INVOKE_INTERFACE_JUMBO_continue 7424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 742571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 742671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 742771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_27FF: /* 0x127 */ 742871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_27FF.S */ 742971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 743071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 743371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 743471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 743571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_28FF: /* 0x128 */ 743671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_28FF.S */ 743771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 743871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 744171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 744271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 744371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_29FF: /* 0x129 */ 744471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_29FF.S */ 744571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 744671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 744971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 745071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 745171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2AFF: /* 0x12a */ 745271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_2AFF.S */ 745371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 745471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 745771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 745871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 745971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2BFF: /* 0x12b */ 746071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_2BFF.S */ 746171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 746271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 746571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 746671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 746771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2CFF: /* 0x12c */ 746871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_2CFF.S */ 746971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 747071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 747371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 747471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 747571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2DFF: /* 0x12d */ 747671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_2DFF.S */ 747771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 747871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 748171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 748271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 748371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2EFF: /* 0x12e */ 748471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_2EFF.S */ 748571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 748671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 748971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 749071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 749171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_2FFF: /* 0x12f */ 749271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_2FFF.S */ 749371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 749471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 749771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 749871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 749971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_30FF: /* 0x130 */ 750071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_30FF.S */ 750171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 750271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 750571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 750671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 750771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_31FF: /* 0x131 */ 750871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_31FF.S */ 750971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 751071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 751371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 751471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 751571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_32FF: /* 0x132 */ 751671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_32FF.S */ 751771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 751871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 752171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 752271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 752371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_33FF: /* 0x133 */ 752471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_33FF.S */ 752571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 752671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 752971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 753071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 753171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_34FF: /* 0x134 */ 753271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_34FF.S */ 753371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 753471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 753771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 753871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 753971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_35FF: /* 0x135 */ 754071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_35FF.S */ 754171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 754271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 754571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 754671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 754771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_36FF: /* 0x136 */ 754871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_36FF.S */ 754971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 755071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 755371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 755471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 755571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_37FF: /* 0x137 */ 755671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_37FF.S */ 755771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 755871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 756171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 756271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 756371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_38FF: /* 0x138 */ 756471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_38FF.S */ 756571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 756671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 756971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 757071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 757171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_39FF: /* 0x139 */ 757271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_39FF.S */ 757371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 757471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 757771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 757871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 757971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3AFF: /* 0x13a */ 758071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_3AFF.S */ 758171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 758271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 758571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 758671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 758771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3BFF: /* 0x13b */ 758871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_3BFF.S */ 758971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 759071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 759371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 759471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 759571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3CFF: /* 0x13c */ 759671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_3CFF.S */ 759771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 759871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 760171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 760271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 760371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3DFF: /* 0x13d */ 760471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_3DFF.S */ 760571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 760671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 760971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 761071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 761171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3EFF: /* 0x13e */ 761271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_3EFF.S */ 761371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 761471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 761771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 761871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 761971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_3FFF: /* 0x13f */ 762071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_3FFF.S */ 762171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 762271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 762571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 762671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 762771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_40FF: /* 0x140 */ 762871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_40FF.S */ 762971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 763071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 763371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 763471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 763571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_41FF: /* 0x141 */ 763671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_41FF.S */ 763771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 763871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 764171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 764271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 764371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_42FF: /* 0x142 */ 764471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_42FF.S */ 764571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 764671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 76483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 764971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 765071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 765171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_43FF: /* 0x143 */ 765271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_43FF.S */ 765371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 765471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 76553d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 7656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 765771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 765871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 765971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_44FF: /* 0x144 */ 766071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_44FF.S */ 766171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 766271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 766571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 766671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 766771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_45FF: /* 0x145 */ 766871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_45FF.S */ 766971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 767071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 767371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 767471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 767571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_46FF: /* 0x146 */ 767671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_46FF.S */ 767771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 767871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 768171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 768271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 768371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_47FF: /* 0x147 */ 768471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_47FF.S */ 768571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 768671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 768971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 769071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 769171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_48FF: /* 0x148 */ 769271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_48FF.S */ 769371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 769471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 769771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 769871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 769971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_49FF: /* 0x149 */ 770071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_49FF.S */ 770171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 770271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 770571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 770671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 770771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4AFF: /* 0x14a */ 770871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_4AFF.S */ 770971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 771071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7711c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 7712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 771371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 771471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 771571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4BFF: /* 0x14b */ 771671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_4BFF.S */ 771771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 771871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 772171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 772271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 772371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4CFF: /* 0x14c */ 772471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_4CFF.S */ 772571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 772671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 772971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 773071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 773171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4DFF: /* 0x14d */ 773271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_4DFF.S */ 773371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 773471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 773771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 773871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 773971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4EFF: /* 0x14e */ 774071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_4EFF.S */ 774171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 774271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 774571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 774671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 774771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_4FFF: /* 0x14f */ 774871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_4FFF.S */ 774971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 775071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 775371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 775471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 775571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_50FF: /* 0x150 */ 775671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_50FF.S */ 775771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 775871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 776171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 776271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 776371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_51FF: /* 0x151 */ 776471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_51FF.S */ 776571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 776671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7768c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 776971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 777071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 777171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_52FF: /* 0x152 */ 777271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_52FF.S */ 777371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 777471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 777771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 777871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 777971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_53FF: /* 0x153 */ 778071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_53FF.S */ 778171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 778271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 778571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 778671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 778771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_54FF: /* 0x154 */ 778871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_54FF.S */ 778971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 779071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 779371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 779471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 779571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_55FF: /* 0x155 */ 779671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_55FF.S */ 779771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 779871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 780171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 780271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 780371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_56FF: /* 0x156 */ 780471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_56FF.S */ 780571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 780671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 780971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 781071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 781171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_57FF: /* 0x157 */ 781271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_57FF.S */ 781371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 781471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 7815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 781771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 781871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 781971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_58FF: /* 0x158 */ 782071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_58FF.S */ 782171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 782271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 782371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 782471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 782571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 782671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 782771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_59FF: /* 0x159 */ 782871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_59FF.S */ 782971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 783071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 783171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 783271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 783371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 783471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 783571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5AFF: /* 0x15a */ 783671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_5AFF.S */ 783771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 783871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 783971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 784071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 784171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 784271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 784371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5BFF: /* 0x15b */ 784471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_5BFF.S */ 784571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 784671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 784771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 784871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 784971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 785071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 785171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5CFF: /* 0x15c */ 785271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_5CFF.S */ 785371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 785471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 785571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 785671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 785771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 785871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 785971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5DFF: /* 0x15d */ 786071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_5DFF.S */ 786171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 786271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 786371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 786471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 786571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 786671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 786771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5EFF: /* 0x15e */ 786871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_5EFF.S */ 786971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 787071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 787171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 787271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 787371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 787471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 787571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_5FFF: /* 0x15f */ 787671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_5FFF.S */ 787771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 787871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 787971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 788071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 788171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 788271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 788371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_60FF: /* 0x160 */ 788471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_60FF.S */ 788571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 788671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 788771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 788871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 788971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 789071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 789171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_61FF: /* 0x161 */ 789271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_61FF.S */ 789371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 789471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 789571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 789671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 789771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 789871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 789971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_62FF: /* 0x162 */ 790071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_62FF.S */ 790171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 790271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 790371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 790471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 790571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 790671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 790771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_63FF: /* 0x163 */ 790871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_63FF.S */ 790971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 791071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 791171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 791271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 791371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 791471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 791571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_64FF: /* 0x164 */ 791671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_64FF.S */ 791771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 791871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 791971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 792071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 792171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 792271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 792371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_65FF: /* 0x165 */ 792471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_65FF.S */ 792571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 792671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 792771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 792871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 792971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 793071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 793171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_66FF: /* 0x166 */ 793271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_66FF.S */ 793371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 793471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 793571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 793671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 793771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 793871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 793971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_67FF: /* 0x167 */ 794071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_67FF.S */ 794171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 794271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 794371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 794471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 794571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 794671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 794771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_68FF: /* 0x168 */ 794871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_68FF.S */ 794971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 795071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 795171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 795271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 795371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 795471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 795571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_69FF: /* 0x169 */ 795671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_69FF.S */ 795771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 795871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 795971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 796071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 796171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 796271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 796371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6AFF: /* 0x16a */ 796471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_6AFF.S */ 796571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 796671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 796771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 796871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 796971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 797071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 797171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6BFF: /* 0x16b */ 797271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_6BFF.S */ 797371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 797471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 797571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 797671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 797771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 797871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 797971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6CFF: /* 0x16c */ 798071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_6CFF.S */ 798171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 798271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 798371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 798471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 798571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 798671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 798771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6DFF: /* 0x16d */ 798871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_6DFF.S */ 798971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 799071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 799171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 799271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 799371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 799471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 799571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6EFF: /* 0x16e */ 799671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_6EFF.S */ 799771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 799871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 799971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 800071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 800171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 800271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 800371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_6FFF: /* 0x16f */ 800471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_6FFF.S */ 800571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 800671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 800771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 800871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 800971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 801071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 801171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_70FF: /* 0x170 */ 801271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_70FF.S */ 801371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 801471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 801571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 801671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 801771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 801871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 801971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_71FF: /* 0x171 */ 802071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_71FF.S */ 802171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 802271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 802371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 802471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 802571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 802671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 802771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_72FF: /* 0x172 */ 802871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_72FF.S */ 802971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 803071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 803171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 803271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 803371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 803471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 803571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_73FF: /* 0x173 */ 803671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_73FF.S */ 803771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 803871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 803971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 804071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 804171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 804271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 804371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_74FF: /* 0x174 */ 804471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_74FF.S */ 804571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 804671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 804771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 804871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 804971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 805071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 805171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_75FF: /* 0x175 */ 805271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_75FF.S */ 805371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 805471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 805571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 805671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 805771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 805871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 805971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_76FF: /* 0x176 */ 806071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_76FF.S */ 806171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 806271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 806371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 806471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 806571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 806671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 806771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_77FF: /* 0x177 */ 806871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_77FF.S */ 806971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 807071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 807171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 807271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 807371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 807471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 807571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_78FF: /* 0x178 */ 807671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_78FF.S */ 807771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 807871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 807971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 808071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 808171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 808271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 808371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_79FF: /* 0x179 */ 808471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_79FF.S */ 808571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 808671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 808771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 808871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 808971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 809071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 809171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7AFF: /* 0x17a */ 809271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_7AFF.S */ 809371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 809471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 809571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 809671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 809771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 809871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 809971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7BFF: /* 0x17b */ 810071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_7BFF.S */ 810171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 810271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 810371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 810471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 810571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 810671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 810771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7CFF: /* 0x17c */ 810871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_7CFF.S */ 810971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 811071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 811171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 811271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 811371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 811471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 811571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7DFF: /* 0x17d */ 811671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_7DFF.S */ 811771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 811871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 811971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 812071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 812171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 812271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 812371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7EFF: /* 0x17e */ 812471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_7EFF.S */ 812571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 812671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 812771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 812871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 812971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 813071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 813171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_7FFF: /* 0x17f */ 813271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_7FFF.S */ 813371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 813471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 813571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 813671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 813771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 813871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 813971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_80FF: /* 0x180 */ 814071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_80FF.S */ 814171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 814271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 814371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 814471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 814571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 814671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 814771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_81FF: /* 0x181 */ 814871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_81FF.S */ 814971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 815071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 815171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 815271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 815371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 815471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 815571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_82FF: /* 0x182 */ 815671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_82FF.S */ 815771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 815871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 815971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 816071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 816171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 816271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 816371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_83FF: /* 0x183 */ 816471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_83FF.S */ 816571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 816671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 816771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 816871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 816971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 817071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 817171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_84FF: /* 0x184 */ 817271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_84FF.S */ 817371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 817471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 817571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 817671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 817771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 817871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 817971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_85FF: /* 0x185 */ 818071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_85FF.S */ 818171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 818271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 818371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 818471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 818571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 818671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 818771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_86FF: /* 0x186 */ 818871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_86FF.S */ 818971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 819071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 819171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 819271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 819371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 819471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 819571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_87FF: /* 0x187 */ 819671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_87FF.S */ 819771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 819871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 819971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 820071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 820171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 820271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 820371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_88FF: /* 0x188 */ 820471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_88FF.S */ 820571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 820671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 820771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 820871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 820971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 821071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 821171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_89FF: /* 0x189 */ 821271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_89FF.S */ 821371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 821471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 821571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 821671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 821771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 821871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 821971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8AFF: /* 0x18a */ 822071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_8AFF.S */ 822171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 822271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 822371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 822471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 822571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 822671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 822771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8BFF: /* 0x18b */ 822871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_8BFF.S */ 822971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 823071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 823171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 823271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 823371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 823471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 823571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8CFF: /* 0x18c */ 823671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_8CFF.S */ 823771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 823871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 823971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 824071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 824171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 824271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 824371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8DFF: /* 0x18d */ 824471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_8DFF.S */ 824571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 824671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 824771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 824871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 824971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 825071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 825171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8EFF: /* 0x18e */ 825271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_8EFF.S */ 825371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 825471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 825571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 825671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 825771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 825871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 825971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_8FFF: /* 0x18f */ 826071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_8FFF.S */ 826171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 826271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 826371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 826471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 826571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 826671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 826771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_90FF: /* 0x190 */ 826871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_90FF.S */ 826971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 827071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 827171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 827271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 827371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 827471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 827571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_91FF: /* 0x191 */ 827671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_91FF.S */ 827771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 827871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 827971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 828071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 828171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 828271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 828371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_92FF: /* 0x192 */ 828471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_92FF.S */ 828571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 828671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 828771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 828871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 828971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 829071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 829171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_93FF: /* 0x193 */ 829271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_93FF.S */ 829371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 829471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 829571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 829671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 829771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 829871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 829971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_94FF: /* 0x194 */ 830071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_94FF.S */ 830171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 830271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 830371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 830471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 830571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 830671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 830771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_95FF: /* 0x195 */ 830871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_95FF.S */ 830971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 831071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 831171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 831271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 831371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 831471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 831571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_96FF: /* 0x196 */ 831671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_96FF.S */ 831771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 831871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 831971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 832071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 832171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 832271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 832371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_97FF: /* 0x197 */ 832471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_97FF.S */ 832571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 832671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 832771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 832871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 832971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 833071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 833171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_98FF: /* 0x198 */ 833271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_98FF.S */ 833371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 833471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 833571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 833671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 833771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 833871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 833971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_99FF: /* 0x199 */ 834071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_99FF.S */ 834171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 834271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 834371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 834471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 834571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 834671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 834771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9AFF: /* 0x19a */ 834871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_9AFF.S */ 834971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 835071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 835171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 835271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 835371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 835471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 835571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9BFF: /* 0x19b */ 835671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_9BFF.S */ 835771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 835871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 835971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 836071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 836171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 836271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 836371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9CFF: /* 0x19c */ 836471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_9CFF.S */ 836571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 836671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 836771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 836871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 836971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 837071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 837171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9DFF: /* 0x19d */ 837271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_9DFF.S */ 837371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 837471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 837571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 837671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 837771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 837871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 837971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9EFF: /* 0x19e */ 838071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_9EFF.S */ 838171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 838271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 838371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 838471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 838571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 838671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 838771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_9FFF: /* 0x19f */ 838871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_9FFF.S */ 838971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 839071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 839171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 839271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 839371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 839471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 839571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A0FF: /* 0x1a0 */ 839671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A0FF.S */ 839771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 839871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 839971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 840071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 840171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 840271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 840371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A1FF: /* 0x1a1 */ 840471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A1FF.S */ 840571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 840671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 840771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 840871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 840971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 841071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 841171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A2FF: /* 0x1a2 */ 841271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A2FF.S */ 841371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 841471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 841571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 841671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 841771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 841871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 841971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A3FF: /* 0x1a3 */ 842071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A3FF.S */ 842171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 842271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 842371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 842471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 842571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 842671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 842771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A4FF: /* 0x1a4 */ 842871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A4FF.S */ 842971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 843071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 843171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 843271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 843371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 843471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 843571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A5FF: /* 0x1a5 */ 843671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A5FF.S */ 843771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 843871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 843971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 844071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 844171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 844271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 844371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A6FF: /* 0x1a6 */ 844471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A6FF.S */ 844571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 844671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 844771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 844871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 844971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 845071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 845171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A7FF: /* 0x1a7 */ 845271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A7FF.S */ 845371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 845471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 845571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 845671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 845771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 845871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 845971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A8FF: /* 0x1a8 */ 846071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A8FF.S */ 846171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 846271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 846371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 846471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 846571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 846671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 846771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_A9FF: /* 0x1a9 */ 846871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_A9FF.S */ 846971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 847071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 847171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 847271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 847371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 847471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 847571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_AAFF: /* 0x1aa */ 847671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_AAFF.S */ 847771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 847871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 847971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 848071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 848171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 848271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 848371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_ABFF: /* 0x1ab */ 848471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_ABFF.S */ 848571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 848671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 848771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 848871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 848971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 849071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 849171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_ACFF: /* 0x1ac */ 849271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_ACFF.S */ 849371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 849471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 849571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 849671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 849771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 849871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 849971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_ADFF: /* 0x1ad */ 850071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_ADFF.S */ 850171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 850271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 850371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 850471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 850571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 850671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 850771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_AEFF: /* 0x1ae */ 850871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_AEFF.S */ 850971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 851071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 851171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 851271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 851371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 851471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 851571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_AFFF: /* 0x1af */ 851671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_AFFF.S */ 851771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 851871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 851971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 852071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 852171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 852271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 852371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B0FF: /* 0x1b0 */ 852471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B0FF.S */ 852571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 852671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 852771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 852871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 852971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 853071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 853171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B1FF: /* 0x1b1 */ 853271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B1FF.S */ 853371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 853471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 853571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 853671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 853771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 853871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 853971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B2FF: /* 0x1b2 */ 854071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B2FF.S */ 854171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 854271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 854371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 854471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 854571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 854671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 854771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B3FF: /* 0x1b3 */ 854871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B3FF.S */ 854971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 855071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 855171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 855271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 855371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 855471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 855571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B4FF: /* 0x1b4 */ 855671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B4FF.S */ 855771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 855871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 855971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 856071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 856171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 856271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 856371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B5FF: /* 0x1b5 */ 856471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B5FF.S */ 856571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 856671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 856771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 856871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 856971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 857071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 857171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B6FF: /* 0x1b6 */ 857271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B6FF.S */ 857371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 857471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 857571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 857671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 857771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 857871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 857971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B7FF: /* 0x1b7 */ 858071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B7FF.S */ 858171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 858271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 858371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 858471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 858571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 858671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 858771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B8FF: /* 0x1b8 */ 858871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B8FF.S */ 858971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 859071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 859171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 859271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 859371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 859471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 859571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_B9FF: /* 0x1b9 */ 859671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_B9FF.S */ 859771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 859871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 859971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 860071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 860171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 860271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 860371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BAFF: /* 0x1ba */ 860471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_BAFF.S */ 860571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 860671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 860771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 860871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 860971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 861071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 861171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BBFF: /* 0x1bb */ 861271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_BBFF.S */ 861371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 861471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 861571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 861671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 861771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 861871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 861971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BCFF: /* 0x1bc */ 862071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_BCFF.S */ 862171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 862271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 862371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 862471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 862571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 862671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 862771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BDFF: /* 0x1bd */ 862871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_BDFF.S */ 862971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 863071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 863171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 863271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 863371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 863471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 863571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BEFF: /* 0x1be */ 863671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_BEFF.S */ 863771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 863871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 863971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 864071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 864171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 864271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 864371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_BFFF: /* 0x1bf */ 864471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_BFFF.S */ 864571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 864671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 864771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 864871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 864971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 865071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 865171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C0FF: /* 0x1c0 */ 865271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C0FF.S */ 865371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 865471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 865571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 865671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 865771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 865871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 865971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C1FF: /* 0x1c1 */ 866071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C1FF.S */ 866171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 866271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 866371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 866471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 866571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 866671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 866771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C2FF: /* 0x1c2 */ 866871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C2FF.S */ 866971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 867071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 867171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 867271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 867371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 867471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 867571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C3FF: /* 0x1c3 */ 867671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C3FF.S */ 867771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 867871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 867971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 868071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 868171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 868271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 868371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C4FF: /* 0x1c4 */ 868471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C4FF.S */ 868571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 868671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 868771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 868871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 868971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 869071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 869171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C5FF: /* 0x1c5 */ 869271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C5FF.S */ 869371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 869471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 869571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 869671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 869771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 869871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 869971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C6FF: /* 0x1c6 */ 870071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C6FF.S */ 870171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 870271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 870371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 870471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 870571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 870671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 870771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C7FF: /* 0x1c7 */ 870871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C7FF.S */ 870971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 871071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 871171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 871271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 871371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 871471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 871571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C8FF: /* 0x1c8 */ 871671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C8FF.S */ 871771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 871871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 871971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 872071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 872171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 872271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 872371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_C9FF: /* 0x1c9 */ 872471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_C9FF.S */ 872571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 872671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 872771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 872871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 872971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 873071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 873171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CAFF: /* 0x1ca */ 873271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_CAFF.S */ 873371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 873471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 873571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 873671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 873771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 873871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 873971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CBFF: /* 0x1cb */ 874071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_CBFF.S */ 874171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 874271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 874371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 874471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 874571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 874671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 874771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CCFF: /* 0x1cc */ 874871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_CCFF.S */ 874971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 875071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 875171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 875271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 875371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 875471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 875571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CDFF: /* 0x1cd */ 875671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_CDFF.S */ 875771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 875871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 875971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 876071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 876171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 876271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 876371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CEFF: /* 0x1ce */ 876471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_CEFF.S */ 876571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 876671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 876771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 876871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 876971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 877071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 877171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_CFFF: /* 0x1cf */ 877271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_CFFF.S */ 877371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 877471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 877571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 877671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 877771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 877871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 877971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D0FF: /* 0x1d0 */ 878071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D0FF.S */ 878171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 878271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 878371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 878471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 878571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 878671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 878771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D1FF: /* 0x1d1 */ 878871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D1FF.S */ 878971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 879071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 879171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 879271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 879371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 879471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 879571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D2FF: /* 0x1d2 */ 879671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D2FF.S */ 879771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 879871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 879971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 880071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 880171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 880271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 880371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D3FF: /* 0x1d3 */ 880471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D3FF.S */ 880571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 880671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 880771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 880871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 880971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 881071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 881171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D4FF: /* 0x1d4 */ 881271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D4FF.S */ 881371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 881471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 881571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 881671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 881771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 881871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 881971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D5FF: /* 0x1d5 */ 882071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D5FF.S */ 882171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 882271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 882371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 882471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 882571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 882671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 882771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D6FF: /* 0x1d6 */ 882871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D6FF.S */ 882971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 883071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 883171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 883271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 883371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 883471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 883571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D7FF: /* 0x1d7 */ 883671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D7FF.S */ 883771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 883871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 883971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 884071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 884171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 884271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 884371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D8FF: /* 0x1d8 */ 884471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D8FF.S */ 884571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 884671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 884771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 884871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 884971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 885071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 885171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_D9FF: /* 0x1d9 */ 885271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_D9FF.S */ 885371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 885471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 885571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 885671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 885771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 885871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 885971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DAFF: /* 0x1da */ 886071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_DAFF.S */ 886171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 886271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 886371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 886471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 886571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 886671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 886771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DBFF: /* 0x1db */ 886871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_DBFF.S */ 886971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 887071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 887171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 887271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 887371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 887471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 887571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DCFF: /* 0x1dc */ 887671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_DCFF.S */ 887771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 887871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 887971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 888071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 888171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 888271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 888371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DDFF: /* 0x1dd */ 888471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_DDFF.S */ 888571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 888671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 888771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 888871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 888971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 889071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 889171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DEFF: /* 0x1de */ 889271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_DEFF.S */ 889371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 889471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 889571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 889671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 889771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 889871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 889971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_DFFF: /* 0x1df */ 890071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_DFFF.S */ 890171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 890271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 890371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 890471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 890571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 890671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 890771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E0FF: /* 0x1e0 */ 890871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E0FF.S */ 890971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 891071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 891171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 891271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 891371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 891471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 891571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E1FF: /* 0x1e1 */ 891671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E1FF.S */ 891771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 891871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 891971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 892071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 892171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 892271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 892371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E2FF: /* 0x1e2 */ 892471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E2FF.S */ 892571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 892671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 892771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 892871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 892971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 893071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 893171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E3FF: /* 0x1e3 */ 893271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E3FF.S */ 893371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 893471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 893571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 893671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 893771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 893871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 893971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E4FF: /* 0x1e4 */ 894071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E4FF.S */ 894171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 894271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 894371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 894471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 894571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 894671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 894771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E5FF: /* 0x1e5 */ 894871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E5FF.S */ 894971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 895071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 895171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 895271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 895371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 895471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 895571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E6FF: /* 0x1e6 */ 895671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E6FF.S */ 895771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 895871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 895971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 896071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 896171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 896271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 896371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E7FF: /* 0x1e7 */ 896471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E7FF.S */ 896571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 896671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 896771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 896871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 896971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 897071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 897171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E8FF: /* 0x1e8 */ 897271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E8FF.S */ 897371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 897471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 897571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 897671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 897771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 897871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 897971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_E9FF: /* 0x1e9 */ 898071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_E9FF.S */ 898171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 898271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 898371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 898471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 898571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 898671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 898771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EAFF: /* 0x1ea */ 898871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_EAFF.S */ 898971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 899071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 899171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 899271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 899371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 899471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 899571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EBFF: /* 0x1eb */ 899671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_EBFF.S */ 899771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 899871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 899971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 900071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 900171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 900271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 900371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_ECFF: /* 0x1ec */ 900471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_ECFF.S */ 900571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 900671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 900771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 900871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 900971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 901071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 901171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EDFF: /* 0x1ed */ 901271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_EDFF.S */ 901371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 901471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 901571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 901671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 901771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 901871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 901971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EEFF: /* 0x1ee */ 902071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_EEFF.S */ 902171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 902271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 902371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 902471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 902571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 902671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 902771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_EFFF: /* 0x1ef */ 902871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_EFFF.S */ 902971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 903071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 903171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 903271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 903371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 903471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 903571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F0FF: /* 0x1f0 */ 903671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F0FF.S */ 903771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 903871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 903971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 904071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 904171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 904271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 904371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F1FF: /* 0x1f1 */ 904471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F1FF.S */ 904571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 904671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 904771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 904871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 904971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 905071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 905171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F2FF: /* 0x1f2 */ 905271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F2FF.S */ 905371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 905471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 905571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 905671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 905771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 905871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 905971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F3FF: /* 0x1f3 */ 906071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F3FF.S */ 906171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 906271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 906371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 906471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 906571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 906671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 906771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F4FF: /* 0x1f4 */ 906871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F4FF.S */ 906971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 907071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 907171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 907271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 907371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 907471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 907571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F5FF: /* 0x1f5 */ 907671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F5FF.S */ 907771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 907871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 907971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 908071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 908171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 908271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 908371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F6FF: /* 0x1f6 */ 908471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F6FF.S */ 908571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 908671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 908771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 908871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 908971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 909071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 909171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F7FF: /* 0x1f7 */ 909271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F7FF.S */ 909371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 909471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 909571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 909671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 909771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 909871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 909971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F8FF: /* 0x1f8 */ 910071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F8FF.S */ 910171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 910271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 910371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 910471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 910571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 910671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 910771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_F9FF: /* 0x1f9 */ 910871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_F9FF.S */ 910971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 911071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 911171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 911271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 911371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 911471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 911571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FAFF: /* 0x1fa */ 911671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_FAFF.S */ 911771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 911871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 911971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 912071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 912171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 912271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 912371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FBFF: /* 0x1fb */ 912471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_FBFF.S */ 912571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 912671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 912771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 912871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 912971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 913071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 913171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FCFF: /* 0x1fc */ 913271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_FCFF.S */ 913371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 913471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 913571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 913671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 913771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 913871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 913971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FDFF: /* 0x1fd */ 914071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_FDFF.S */ 914171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 914271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 914371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 914471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 914571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 914671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 914771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_UNUSED_FEFF: /* 0x1fe */ 914871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_UNUSED_FEFF.S */ 914971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/unused.S */ 915071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_abort 915171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 915271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 915371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* ------------------------------ */ 915471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 915571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.L_OP_THROW_VERIFICATION_ERROR_JUMBO: /* 0x1ff */ 915671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* File: x86/OP_THROW_VERIFICATION_ERROR_JUMBO.S */ 915771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 915871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Handle a jumbo throw-verification-error instruction. This throws an 915971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * exception for an error discovered during verification. The 916071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * exception is indicated by BBBB, with some detail provided by AAAAAAAA. 916171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 916271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* exop BBBB, ref@AAAAAAAA */ 91639f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 916471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- AAAAAAAA 91659f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 916671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 916771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG2(%esp) # arg2<- AAAAAAAA 916871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,OUT_ARG1(%esp) # arg1<- BBBB 916971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) # arg0<- method 917071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmThrowVerificationError # call(method, kind, ref) 917171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # handle exception 917271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 917371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 917471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 64 9175b387fe1b970a216c09d2abc98c893ff1fff3e512Andy McFadden .size .L_OP_NOP, .-.L_OP_NOP 917671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .global dvmAsmInstructionEnd 917771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaodvmAsmInstructionEnd: 917871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 917971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* 918071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * =========================================================================== 918171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Sister implementations 918271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * =========================================================================== 918371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 918471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .global dvmAsmSisterStart 918571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .type dvmAsmSisterStart, %function 918671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .text 918771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .balign 4 918871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaodvmAsmSisterStart: 918971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 919071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CONST_STRING */ 919171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 919271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* This is the less common path, so we'll redo some work 919371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao here rather than force spills on the common path */ 919471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CONST_STRING_resolve: 91959f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 919671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,rINST # rINST<- AA 919771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 91989f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%eax),%eax # eax<- self->method 919971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%ecx # ecx<- BBBB 920071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%eax),%eax 920171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) 920271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) 920371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveString # go resolve 920471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # failed? 920571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown 920671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 920771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 920871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 920971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 921071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 921171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CONST_STRING_JUMBO */ 921271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 921371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* This is the less common path, so we'll redo some work 921471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao here rather than force spills on the common path */ 921571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CONST_STRING_JUMBO_resolve: 92169f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 921771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,rINST # rINST<- AA 921871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 92199f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%eax),%eax # eax<- self->method 922071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%ecx # ecx<- BBBBBBBB 922171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%eax),%eax 922271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) 922371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) 922471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveString # go resolve 922571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # failed? 922671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown 922771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 922871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 3 %edx 922971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 3 923071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 923171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 923271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CONST_CLASS */ 923371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 923471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* This is the less common path, so we'll redo some work 923571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao here rather than force spills on the common path */ 923671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CONST_CLASS_resolve: 92379f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 923871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,rINST # rINST<- AA 923971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 92409f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%eax),%eax # eax<- self->method 924171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $1,OUT_ARG2(%esp) # true 924271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%ecx # ecx<- BBBB 924371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%eax),%eax 924471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) 924571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) 924671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveClass # go resolve 924771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # failed? 924871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown 924971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 925071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 925171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 925271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 925371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 925471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_MONITOR_ENTER */ 925571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 925671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_MONITOR_ENTER_continue: 925771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 925871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 925971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmLockObject # dvmLockObject(self,object) 926071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 926171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT 926271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 926371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_MONITOR_EXIT */ 926471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 926571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_MONITOR_EXIT_continue: 926671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmUnlockObject # unlock(self,obj) 926771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 1 %edx 926871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # success? 926971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 927071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # no, exception pending 927171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 927271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_MONITOR_EXIT_errNullObject: 927371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 # advance before throw 927471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_errNullObject 927571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 927671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CHECK_CAST */ 927771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 927871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 927971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Trivial test failed, need to perform full check. This is common. 928071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds obj->clazz 928171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds class resolved from BBBB 928271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds object 928371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 928471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_fullcheck: 928571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,sReg0 # we'll need the desired class on failure 928671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 928771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 928871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmInstanceofNonTrivial # eax<- boolean result 928971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # failed? 929071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_CHECK_CAST_okay # no, success 929171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 929271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao # A cast has failed. We need to throw a ClassCastException. 929371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 929471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(rINST),%eax 929571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- obj->clazz 929671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl sReg0,%ecx 929771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) # arg1<- desired class 929871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmThrowClassCastException 929971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 930071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 930171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 930271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Resolution required. This is the least-likely path, and we're 930371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * going to have to recreate some data. 930471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 930571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds object 930671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 930771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_resolve: 93089f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 930971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 931071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- BBBB 93119f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 931271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 931371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- metho->clazz 931471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,OUT_ARG2(%esp) # arg2<- false 931571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 931671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveClass # eax<- resolved ClassObject ptr 931771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # got null? 931871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # yes, handle exception 931971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(rINST),%ecx # ecx<- obj->clazz 932071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_CHECK_CAST_resolved # pick up where we left off 932171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 932271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INSTANCE_OF */ 932371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 932471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 932571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Trivial test failed, need to perform full check. This is common. 932671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds obj->clazz 932771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds class resolved from BBBB 932871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST has BA 932971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 933071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_fullcheck: 933171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) 933271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) 933371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmInstanceofNonTrivial # eax<- boolean result 933471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao # fall through to OP_INSTANCE_OF_store 933571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 933671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 933771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds boolean result 933871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BA 933971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 934071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_store: 934171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 934271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao andb $0xf,rINSTbl # <- A 934371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 934471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST # vA<- eax 934571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 934671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 934771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 934871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Trivial test succeeded, save and bail. 934971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * r9 holds A 935071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 935171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_trivial: 935271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 935371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao andb $0xf,rINSTbl # <- A 935471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 935571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $1,%eax 935671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST # vA<- true 935771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 935871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 935971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 936071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Resolution required. This is the least-likely path. 936171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 936271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * edx holds BBBB 936371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BA 936471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 936571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_resolve: 936671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) # arg1<- BBBB 93679f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 93689f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx 936971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $1,OUT_ARG2(%esp) # arg2<- true 937071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 937171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 937271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 937371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveClass # eax<- resolved ClassObject ptr 937471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # success? 937571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # no, handle exception 937671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* Now, we need to sync up with fast path. We need eax to 937771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * hold the obj->clazz, and ecx to hold the resolved class 937871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 937971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,%ecx # ecx<- resolved class 938071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- BA 938171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sarl $4,%eax # eax<- B 938271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %eax %eax # eax<- vB (obj) 938371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(%eax),%eax # eax<- obj->clazz 938471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_INSTANCE_OF_resolved 938571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 938671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_NEW_INSTANCE */ 938771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 938871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_initialized: # on entry, ecx<- class 938971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* TODO: remove test for interface/abstract, now done in verifier */ 939071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl $(ACC_INTERFACE|ACC_ABSTRACT),offClassObject_accessFlags(%ecx) 939171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $ALLOC_DONT_TRACK,OUT_ARG1(%esp) 939271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_NEW_INSTANCE_abstract 939371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_finish: # ecx=class 939471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 939571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmAllocObject # eax<- new object 939671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 939771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # success? 939871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # no, bail out 939971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 940071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 940171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 940271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 940371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 940471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Class initialization required. 940571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 940671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds class object 940771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 940871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_needinit: 940971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save object 941071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 941171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmInitClass # initialize class 941271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) # restore object 941371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # success? 941471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_NEW_INSTANCE_initialized # success, continue 941571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # go deal with init exception 941671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 941771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 941871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Resolution required. This is the least-likely path. 941971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 942071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 942171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_resolve: 94229f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 942371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax 94249f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 942571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 942671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 942771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,OUT_ARG2(%esp) 942871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 942971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveClass # call(clazz,off,flags) 943071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,%ecx # ecx<- resolved ClassObject ptr 943171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # success? 943271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_NEW_INSTANCE_resolved # good to go 943371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 943471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 943571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 943671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * TODO: remove this 943771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * We can't instantiate an abstract class or interface, so throw an 943871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * InstantiationError with the class descriptor as the message. 943971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 944071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds class object 944171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 944271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_abstract: 944371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_descriptor(%ecx),%eax 944471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $.LstrInstantiationError,OUT_ARG0(%esp) 944571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 944671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmThrowExceptionWithClassMessage 944771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 944871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 944971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_NEW_ARRAY */ 945071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 945171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 945271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Resolve class. (This is an uncommon case.) 945371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds class (null here) 945471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds array length (vB) 945571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 945671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_ARRAY_resolve: 94579f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 945871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%eax) # save array length 94599f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 946071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- CCCC 946171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 946271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 946371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,OUT_ARG2(%esp) 946471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 946571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveClass # eax<- call(clazz,ref,flag) 946671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,%ecx 946771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%eax) 946871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # successful resolution? 946971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # no, bail. 947071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao# fall through to OP_NEW_ARRAY_finish 947171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 947271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 947371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Finish allocation 947471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 947571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds class 947671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds array length (vB) 947771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 947871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_ARRAY_finish: 947971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 948071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 948171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) 948271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmAllocArrayByClass # eax<- call(clazz,length,flags) 948371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 948471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # failed? 948571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # yup - go handle 948671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 948771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 948871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 948971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 949071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FILLED_NEW_ARRAY */ 949171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 949271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_more: 949371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%eax),%eax # eax<- method->clazz 949471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- clazz 949571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveClass # eax<- call(clazz,ref,flag) 949671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # null? 949771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # yes, handle it 949871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 949971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao # note: fall through to .LOP_FILLED_NEW_ARRAY_continue 950071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 950171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 950271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * On entry: 950371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds array class [r0] 950471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds AA or BB [r10] 950571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx is scratch 950671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 950771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_continue: 950871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_descriptor(%eax),%ecx # ecx<- arrayClass->descriptor 950971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) # arg2<- flags 951071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzbl 1(%ecx),%ecx # ecx<- descriptor[1] 951171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- arrayClass 95129f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 951371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpb $'I',%cl # supported? 951471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 1f 951571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpb $'L',%cl 951671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 1f 951771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpb $'[',%cl 951871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_FILLED_NEW_ARRAY_notimpl # no, not handled yet 951971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1: 95209f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx,offThread_retval+4(%eax) # save type 952171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if (!0) 952271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(rINST) # save copy, need "B" later 952371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sarl $4,rINST 952471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 952571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,OUT_ARG1(%esp) # arg1<- A or AA (length) 952671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmAllocArrayByClass # eax<- call(arrayClass, length, flags) 95279f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 952871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # alloc successful? 952971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # no, handle exception 95309f601a917c8878204482c37aec7005054b6776fabuzbee movl %eax,offThread_retval(%ecx) # retval.l<- new array 953171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 4(rPC),%ecx # ecx<- FEDC or CCCC 953271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal offArrayObject_contents(%eax),%eax # eax<- newArray->contents 953371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 953471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* at this point: 953571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax is pointer to tgt 953671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST is length 953771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx is FEDC or CCCC 953871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * TMP_SPILL1 is BA 953971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * We now need to copy values from registers into the array 954071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 954171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 954271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 0 954371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao # set up src pointer 954471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP2(%esi) 954571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP3(%edi) 954671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal (rFP,%ecx,4),%esi # set up src ptr 954771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,%edi # set up dst ptr 954871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%ecx # load count register 954971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao rep 955071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movsd 955171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP2(%esi) 955271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP3(%edi) 95539f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 95549f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_retval+4(%ecx),%eax # eax<- type 955571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 3 %edx 955671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .else 955771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl rINST,rINST 955871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 4f 955971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%edx) # restore "BA" 956071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao andl $0x0f,%edx # edx<- 0000000A 956171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sall $16,%edx # edx<- 000A0000 956271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao orl %ecx,%edx # edx<- 000AFEDC 956371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao3: 956471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0xf,%ecx 956571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao andl %edx,%ecx # ecx<- next reg to load 956671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx 956771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao shrl $4,%edx 956871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal 4(%eax),%eax 956971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,-4(%eax) 957071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sub $1,rINST 957171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne 3b 957271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao4: 95739f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 95749f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_retval+4(%ecx),%eax # eax<- type 957571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 3 %edx 957671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 957771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 957871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpb $'I',%al # Int array? 957971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 5f # skip card mark if so 95809f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_retval(%ecx),%eax # eax<- object head 95819f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_cardTable(%ecx),%ecx # card table base 958271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao shrl $GC_CARD_SHIFT,%eax # convert to card num 958371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb %cl,(%ecx,%eax) # mark card based on object head 958471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao5: 958571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 3 958671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 958771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 958871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 958971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 959071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Throw an exception indicating that we have not implemented this 959171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * mode of filled-new-array. 959271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 959371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_notimpl: 959471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $.LstrInternalErrorA,%eax 959571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) 959671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $.LstrFilledNewArrayNotImplA,%eax 959771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 959871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmThrowException 959971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 960071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 960171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FILLED_NEW_ARRAY_RANGE */ 960271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 960371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_RANGE_more: 960471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%eax),%eax # eax<- method->clazz 960571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- clazz 960671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveClass # eax<- call(clazz,ref,flag) 960771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # null? 960871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # yes, handle it 960971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 961071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao # note: fall through to .LOP_FILLED_NEW_ARRAY_RANGE_continue 961171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 961271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 961371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * On entry: 961471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds array class [r0] 961571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds AA or BB [r10] 961671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx is scratch 961771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 961871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_RANGE_continue: 961971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_descriptor(%eax),%ecx # ecx<- arrayClass->descriptor 962071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) # arg2<- flags 962171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzbl 1(%ecx),%ecx # ecx<- descriptor[1] 962271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- arrayClass 96239f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 962471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpb $'I',%cl # supported? 962571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 1f 962671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpb $'L',%cl 962771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 1f 962871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpb $'[',%cl 962971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_FILLED_NEW_ARRAY_RANGE_notimpl # no, not handled yet 963071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1: 96319f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx,offThread_retval+4(%eax) # save type 963271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if (!1) 963371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(rINST) # save copy, need "B" later 963471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sarl $4,rINST 963571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 963671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,OUT_ARG1(%esp) # arg1<- A or AA (length) 963771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmAllocArrayByClass # eax<- call(arrayClass, length, flags) 96389f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 963971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # alloc successful? 964071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # no, handle exception 96419f601a917c8878204482c37aec7005054b6776fabuzbee movl %eax,offThread_retval(%ecx) # retval.l<- new array 964271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 4(rPC),%ecx # ecx<- FEDC or CCCC 964371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal offArrayObject_contents(%eax),%eax # eax<- newArray->contents 964471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 964571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* at this point: 964671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax is pointer to tgt 964771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST is length 964871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx is FEDC or CCCC 964971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * TMP_SPILL1 is BA 965071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * We now need to copy values from registers into the array 965171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 965271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 965371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 1 965471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao # set up src pointer 965571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP2(%esi) 965671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP3(%edi) 965771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal (rFP,%ecx,4),%esi # set up src ptr 965871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,%edi # set up dst ptr 965971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%ecx # load count register 966071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao rep 966171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movsd 966271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP2(%esi) 966371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP3(%edi) 96649f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 96659f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_retval+4(%ecx),%eax # eax<- type 966671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 3 %edx 966771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .else 966871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl rINST,rINST 966971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 4f 967071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%edx) # restore "BA" 967171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao andl $0x0f,%edx # edx<- 0000000A 967271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sall $16,%edx # edx<- 000A0000 967371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao orl %ecx,%edx # edx<- 000AFEDC 967471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao3: 967571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0xf,%ecx 967671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao andl %edx,%ecx # ecx<- next reg to load 967771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx 967871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao shrl $4,%edx 967971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal 4(%eax),%eax 968071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,-4(%eax) 968171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sub $1,rINST 968271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne 3b 968371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao4: 96849f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 96859f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_retval+4(%ecx),%eax # eax<- type 968671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 3 %edx 968771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 968871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 968971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpb $'I',%al # Int array? 969071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 5f # skip card mark if so 96919f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_retval(%ecx),%eax # eax<- object head 96929f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_cardTable(%ecx),%ecx # card table base 969371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao shrl $GC_CARD_SHIFT,%eax # convert to card num 969471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb %cl,(%ecx,%eax) # mark card based on object head 969571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao5: 969671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 3 969771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 969871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 969971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 970071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 970171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Throw an exception indicating that we have not implemented this 970271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * mode of filled-new-array. 970371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 970471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_RANGE_notimpl: 970571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $.LstrInternalErrorA,%eax 970671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) 970771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $.LstrFilledNewArrayNotImplA,%eax 970871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 970971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmThrowException 971071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 971171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 971271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMPL_FLOAT */ 971371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 971471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMPL_FLOAT_isNaN: 971571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $-1,%ecx 971671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_CMPL_FLOAT_finish 971771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 971871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMPG_FLOAT */ 971971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 972071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMPG_FLOAT_isNaN: 972171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $1,%ecx 972271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_CMPG_FLOAT_finish 972371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 972471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMPL_DOUBLE */ 972571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 972671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMPL_DOUBLE_isNaN: 972771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $-1,%ecx 972871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_CMPL_DOUBLE_finish 972971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 973071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMPG_DOUBLE */ 973171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 973271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMPG_DOUBLE_isNaN: 973371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $1,%ecx 973471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_CMPG_DOUBLE_finish 973571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 973671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CMP_LONG */ 973771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 973871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMP_LONG_bigger: 973971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $1,%ecx 974071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_CMP_LONG_finish 974171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMP_LONG_smaller: 974271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $-1,%ecx 974371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CMP_LONG_finish: 974471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx rINST 974571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 974671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 974771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 974871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 974971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_AGET_WIDE */ 975071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 975171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_AGET_WIDE_finish: 975271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal offArrayObject_contents(%eax,%ecx,8),%eax 975371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax),%ecx 975471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 4(%eax),%eax 975571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %ecx rINST 0 975671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 1 975771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 975871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 975971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 976071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 976171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_APUT_WIDE */ 976271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 976371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_APUT_WIDE_finish: 976471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal offArrayObject_contents(%eax,%ecx,8),%eax 976571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD %ecx rINST 0 976671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD rINST rINST 1 976771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,4(%eax) 976871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 976971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,(%eax) 977071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 977171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 977271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 977371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_APUT_OBJECT */ 977471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 977571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* On entry: 977671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax<- array object 977771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx<- index 977871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST<- vAA 977971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 978071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_APUT_OBJECT_continue: 978171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal offArrayObject_contents(%eax,%ecx,4),%ecx 978271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl rINST,rINST # storing null reference? 978371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_APUT_OBJECT_skip_check 978471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save target address 978571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP2(%eax) # save object head 978671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(%eax),%eax # eax<- arrayObj->clazz 978771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(rINST),%ecx # ecx<- obj->clazz 978871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 978971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 979071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,sReg0 # store the two classes for later 979171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,sReg1 979271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmCanPutArrayElement # test object type vs. array type 979371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) # recover target address 979471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 97959f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 979671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_APUT_OBJECT_types_okay 979771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 979871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao # The types don't match. We need to throw an ArrayStoreException. 979971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 980071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl sReg0,%eax # restore the two classes... 980171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) 980271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl sReg1,%ecx 980371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) 980471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmThrowArrayStoreException # ...and throw 980571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 980671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 980771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_APUT_OBJECT_types_okay: 98089f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_cardTable(%eax),%eax # get card table base 980971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,(%ecx) # store into array 981071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP2(%ecx) # recover object head 981171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 981271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao shrl $GC_CARD_SHIFT,%ecx # object head to card number 981371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb %al,(%eax,%ecx) # mark card using object head 981471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 981571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 981671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 981771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_APUT_OBJECT_skip_check: 981871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,(%ecx) 981971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 982071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 982171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 982271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 982371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET */ 982471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 982571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 982671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_resolve: 982771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 98289f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 982971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 983071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 983171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 983271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 983371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 983471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 983571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_finish 983671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 983771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 983871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_finish: 983971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 984071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 984171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 984271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 984371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 984471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 984571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 984671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 984771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 984871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 984971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- A 985071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 985171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 985271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 985371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 985471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 985571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_WIDE */ 985671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 985771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 985871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_WIDE_resolve: 985971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 98609f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 986171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 986271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save objpointer across call 986371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rPC,OUT_ARG0(%esp) # pass in method->clazz 986471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 986571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 986671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 986771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_WIDE_finish 986871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 986971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 987071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_WIDE_finish: 987171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 987271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 987371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 987471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 987571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 987671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 987771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 987871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 987971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 988071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal (%ecx,%eax,1),%eax # eax<- address of field 988171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax),%ecx # ecx<- lsw 988271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 4(%eax),%eax # eax<- msw 988371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 988471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %ecx rINST 0 988571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 1 988671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 988771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 988871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 988971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_OBJECT */ 989071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 989171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 989271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_resolve: 989371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 98949f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 989571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 989671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 989771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 989871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 989971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 990071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 990171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_OBJECT_finish 990271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 990371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 990471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_finish: 990571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 990671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 990771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 990871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 990971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 991071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 991171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 991271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 991371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 991471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 991571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- A 991671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 991771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 991871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 991971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 992071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 992171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_BOOLEAN */ 992271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 992371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 992471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BOOLEAN_resolve: 992571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 99269f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 992771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 992871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 992971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 993071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 993171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 993271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 993371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_BOOLEAN_finish 993471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 993571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 993671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BOOLEAN_finish: 993771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 993871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 993971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 994071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 994171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 994271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 994371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 994471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 994571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 994671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 994771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- A 994871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 994971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 995071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 995171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 995271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 995371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_BYTE */ 995471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 995571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 995671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BYTE_resolve: 995771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 99589f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 995971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 996071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 996171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 996271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 996371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 996471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 996571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_BYTE_finish 996671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 996771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 996871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BYTE_finish: 996971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 997071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 997171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 997271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 997371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 997471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 997571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 997671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 997771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 997871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movsbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 997971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- A 998071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 998171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 998271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 998371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 998471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 998571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_CHAR */ 998671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 998771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 998871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_CHAR_resolve: 998971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 99909f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 999171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 999271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 999371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 999471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 999571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 999671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 999771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_CHAR_finish 999871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 999971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1000071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_CHAR_finish: 1000171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1000271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1000371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1000471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1000571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 1000671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1000771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1000871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1000971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1001071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 1001171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- A 1001271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1001371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 1001471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1001571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1001671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1001771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_SHORT */ 1001871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1001971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1002071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_SHORT_resolve: 1002171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 100229f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1002371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1002471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1002571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1002671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1002771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1002871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1002971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_SHORT_finish 1003071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1003171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1003271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_SHORT_finish: 1003371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1003471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1003571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1003671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1003771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 1003871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1003971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1004071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1004171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1004271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movswl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 1004371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- A 1004471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1004571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 1004671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1004771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1004871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1004971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT */ 1005071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1005171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1005271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_resolve: 1005371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 100549f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1005571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1005671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1005771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1005871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1005971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1006071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1006171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_finish 1006271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1006371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1006471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_finish: 1006571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1006671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1006771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1006871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1006971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 1007071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1007171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[A] 1007271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1007371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1007471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1007571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1007671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 1007771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1007871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1007971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1008071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_WIDE */ 1008171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1008271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1008371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_WIDE_resolve: 1008471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 100859f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1008671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1008771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1008871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1008971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1009071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1009171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # ... which returns InstrField ptr 1009271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_WIDE_finish 1009371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1009471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1009571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_WIDE_finish: 1009671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1009771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1009871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1009971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1010071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * %edx is scratch, but needs to be unspilled 1010171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 1010271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1010371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1010471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1010571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1010671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal (%ecx,%eax,1),%eax # eax<- address of field 1010771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD %ecx rINST 0 # ecx<- lsw 1010871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD rINST rINST 1 # rINST<- msw 1010971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1011071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,4(%eax) 1011171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,(%eax) 1011271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1011371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1011471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1011571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_OBJECT */ 1011671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1011771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1011871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_resolve: 1011971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 101209f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1012171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1012271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1012371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1012471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1012571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1012671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1012771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_OBJECT_finish 1012871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1012971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1013071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_finish: 1013171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1013271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1013371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1013471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1013571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * %edx is scratch, but needs to be unspilled 1013671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 1013771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1013871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[A] 1013971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1014071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1014171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1014271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,(%ecx,%eax) # obj.field <- v[A](8/16/32 bits) 101439f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 1014471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl rINST,rINST # stored a NULL? 101459f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_cardTable(%eax),%eax # get card table base 1014671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1014771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 1f # skip card mark if null store 1014871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao shrl $GC_CARD_SHIFT,%ecx # object head to card number 1014971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb %al,(%eax,%ecx) # mark card using object head 1015071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1: 1015171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1015271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1015371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1015471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_BOOLEAN */ 1015571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1015671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1015771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BOOLEAN_resolve: 1015871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 101599f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1016071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1016171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1016271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1016371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1016471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1016571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1016671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_BOOLEAN_finish 1016771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1016871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1016971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BOOLEAN_finish: 1017071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1017171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1017271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1017371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1017471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 1017571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1017671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[A] 1017771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1017871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1017971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1018071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1018171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb rINSTbl,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 1018271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1018371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1018471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1018571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_BYTE */ 1018671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1018771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1018871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BYTE_resolve: 1018971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 101909f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1019171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1019271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1019371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1019471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1019571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1019671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1019771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_BYTE_finish 1019871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1019971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1020071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BYTE_finish: 1020171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1020271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1020371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1020471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1020571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 1020671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1020771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[A] 1020871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1020971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1021071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1021171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1021271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb rINSTbl,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 1021371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1021471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1021571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1021671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_CHAR */ 1021771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1021871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1021971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_CHAR_resolve: 1022071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 102219f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1022271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1022371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1022471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1022571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1022671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1022771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1022871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_CHAR_finish 1022971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1023071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1023171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_CHAR_finish: 1023271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1023371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1023471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1023571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1023671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 1023771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1023871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[A] 1023971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1024071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1024171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1024271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1024371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movw rINSTw,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 1024471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1024571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1024671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1024771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_SHORT */ 1024871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1024971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1025071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_SHORT_resolve: 1025171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 102529f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1025371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1025471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1025571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1025671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1025771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1025871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1025971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_SHORT_finish 1026071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1026171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1026271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_SHORT_finish: 1026371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1026471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1026571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1026671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1026771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 1026871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1026971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[A] 1027071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1027171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1027271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1027371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1027471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movw rINSTw,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 1027571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1027671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1027771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1027871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET */ 1027971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1028071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1028171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1028271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1028371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_resolve: 102849f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1028571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 102869f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1028771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1028871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1028971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1029071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1029171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1029271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1029371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_finish # success, continue 1029471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1029571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1029671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_WIDE */ 1029771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1029871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1029971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1030071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1030171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_WIDE_resolve: 103029f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1030371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 103049f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1030571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1030671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1030771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1030871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1030971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1031071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1031171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_WIDE_finish # success, continue 1031271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1031371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1031471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_OBJECT */ 1031571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1031671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1031771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1031871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1031971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_OBJECT_resolve: 103209f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1032171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 103229f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1032371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1032471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1032571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1032671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1032771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1032871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1032971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_OBJECT_finish # success, continue 1033071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1033171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1033271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_BOOLEAN */ 1033371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1033471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1033571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1033671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1033771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BOOLEAN_resolve: 103389f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1033971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 103409f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1034171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1034271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1034371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1034471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1034571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1034671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1034771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_BOOLEAN_finish # success, continue 1034871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1034971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1035071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_BYTE */ 1035171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1035271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1035371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1035471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1035571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BYTE_resolve: 103569f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1035771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 103589f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1035971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1036071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1036171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1036271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1036371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1036471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1036571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_BYTE_finish # success, continue 1036671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1036771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1036871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_CHAR */ 1036971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1037071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1037171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1037271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1037371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_CHAR_resolve: 103749f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1037571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 103769f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1037771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1037871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1037971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1038071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1038171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1038271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1038371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_CHAR_finish # success, continue 1038471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1038571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1038671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_SHORT */ 1038771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1038871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1038971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1039071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1039171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_SHORT_resolve: 103929f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1039371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 103949f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1039571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1039671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1039771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1039871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1039971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1040071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1040171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_SHORT_finish # success, continue 1040271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1040371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1040471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT */ 1040571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1040671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1040771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1040871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1040971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_resolve: 104109f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1041171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 104129f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1041371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1041471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1041571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1041671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1041771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1041871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1041971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_finish # success, continue 1042071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1042171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1042271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_WIDE */ 1042371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1042471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1042571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1042671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1042771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_WIDE_resolve: 104289f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1042971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 104309f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1043171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1043271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1043371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1043471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1043571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1043671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1043771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_WIDE_finish # success, continue 1043871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1043971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1044071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_OBJECT */ 1044171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1044271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1044371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_continue: 1044471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,offStaticField_value(%eax) # do the store 1044571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # stored null object ptr? 1044671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1044771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 1f # skip card mark if null 104489f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1044971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offField_clazz(%eax),%eax # eax<- method->clazz 104509f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_cardTable(%ecx),%ecx # get card table base 1045171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao shrl $GC_CARD_SHIFT,%eax # head to card number 1045271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb %cl,(%ecx,%eax) # mark card 1045371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1: 1045471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1045571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1045671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1045771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_resolve: 104589f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1045971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 104609f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1046171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1046271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1046371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1046471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1046571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1046671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1046771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_OBJECT_finish # success, continue 1046871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1046971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1047071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_BOOLEAN */ 1047171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1047271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1047371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1047471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1047571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BOOLEAN_resolve: 104769f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1047771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 104789f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1047971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1048071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1048171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1048271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1048371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1048471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1048571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_BOOLEAN_finish # success, continue 1048671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1048771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1048871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_BYTE */ 1048971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1049071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1049171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1049271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1049371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BYTE_resolve: 104949f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1049571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 104969f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1049771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1049871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1049971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1050071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1050171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1050271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1050371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_BYTE_finish # success, continue 1050471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1050571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1050671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_CHAR */ 1050771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1050871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1050971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1051071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1051171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_CHAR_resolve: 105129f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1051371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 105149f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1051571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1051671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1051771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1051871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1051971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1052071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1052171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_CHAR_finish # success, continue 1052271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1052371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1052471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_SHORT */ 1052571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1052671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1052771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1052871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1052971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_SHORT_resolve: 105309f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1053171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 105329f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1053371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1053471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1053571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1053671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1053771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1053871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1053971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_SHORT_finish # success, continue 1054071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1054171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1054271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_VIRTUAL */ 1054371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1054471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1054571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_more: 1054671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%eax),%eax # ecx<- method->clazz 1054771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- clazz 1054871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags 1054971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveMethod # eax<- call(clazz, ref, flags) 1055071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # got null? 1055171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_INVOKE_VIRTUAL_continue # no, continue 1055271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # yes, handle exception 1055371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1055471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* At this point: 1055571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax = resolved base method 1055671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx = scratch 1055771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1055871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_continue: 1055971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 4(rPC),%ecx # ecx<- GFED or CCCC 1056071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if (!0) 1056171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao andl $0xf,%ecx # ecx<- D (or stays CCCC) 1056271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1056371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- "this" 1056471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl offMethod_methodIndex(%eax),%eax # eax<- baseMethod->methodIndex 1056571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # null this? 1056671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # go if so 1056771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(%ecx),%ecx # ecx<- thisPtr->clazz 1056871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable 1056971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- vtable[methodIndex] 1057071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_invokeMethodNoRange 1057171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1057271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_SUPER */ 1057371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1057471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1057571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * At this point: 1057671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx = resolved base method [r0] 1057771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax = method->clazz [r9] 1057871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1057971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_continue: 1058071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_super(%eax),%eax # eax<- method->clazz->super 1058171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl offMethod_methodIndex(%ecx),%ecx # ecx<- baseMthod->methodIndex 1058271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpl offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount) 1058371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jae .LOP_INVOKE_SUPER_nsm # method not present in superclass 1058471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_vtable(%eax),%eax # eax<- ...clazz->super->vtable 1058571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%ecx,4),%eax # eax<- vtable[methodIndex] 1058671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_invokeMethodNoRange 1058771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1058871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1058971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* At this point: 1059071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx = null (needs to be resolved base method) 1059171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax = method->clazz 1059271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1059371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_resolve: 1059471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%eax) # method->clazz 1059571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- method->clazz 1059671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%ecx # ecx<- BBBB 1059771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- resolver method type 1059871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) # arg1<- ref 1059971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveMethod # eax<- call(clazz, ref, flags) 1060071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # got null? 1060171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,%ecx # ecx<- resolved base method 1060271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%eax) # restore method->clazz 1060371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_INVOKE_SUPER_continue # good to go - continue 1060471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # handle exception 1060571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1060671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1060771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Throw a NoSuchMethodError with the method name as the message. 1060871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx = resolved base method 1060971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1061071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_nsm: 1061171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_name(%ecx),%eax 1061271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao mov %eax,OUT_ARG1(%esp) 1061371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_errNoSuchMethod 1061471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1061571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_DIRECT */ 1061671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1061771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1061871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * On entry: 1061971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * TMP_SPILL <- "this" register 1062071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Things a bit ugly on this path, but it's the less 1062171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * frequent one. We'll have to do some reloading. 1062271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1062371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_DIRECT_resolve: 1062471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) 106259f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 106269f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 1062771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # reference (BBBB or CCCC) 1062871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1062971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $METHOD_DIRECT,OUT_ARG2(%esp) 1063071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1063171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1063271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveMethod # eax<- call(clazz, ref, flags) 1063371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1063471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1063571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_INVOKE_DIRECT_finish 1063671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1063771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1063871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_STATIC */ 1063971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1064071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_STATIC_continue: 1064171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $METHOD_STATIC,%eax 1064271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG2(%esp) # arg2<- flags 1064371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveMethod # call(clazz,ref,flags) 1064471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # got null? 1064571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne common_invokeMethodNoRange 1064671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1064771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1064871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_INTERFACE */ 1064971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1065071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_INTERFACE_continue: 1065171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex) 1065271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1065371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown 1065471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_invokeMethodNoRange 1065571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1065671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_VIRTUAL_RANGE */ 1065771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1065871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1065971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_RANGE_more: 1066071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%eax),%eax # ecx<- method->clazz 1066171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- clazz 1066271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags 1066371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveMethod # eax<- call(clazz, ref, flags) 1066471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # got null? 1066571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_INVOKE_VIRTUAL_RANGE_continue # no, continue 1066671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # yes, handle exception 1066771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1066871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* At this point: 1066971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax = resolved base method 1067071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx = scratch 1067171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1067271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_RANGE_continue: 1067371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 4(rPC),%ecx # ecx<- GFED or CCCC 1067471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if (!1) 1067571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao andl $0xf,%ecx # ecx<- D (or stays CCCC) 1067671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1067771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- "this" 1067871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl offMethod_methodIndex(%eax),%eax # eax<- baseMethod->methodIndex 1067971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # null this? 1068071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # go if so 1068171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(%ecx),%ecx # ecx<- thisPtr->clazz 1068271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable 1068371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- vtable[methodIndex] 1068471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_invokeMethodRange 1068571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1068671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_SUPER_RANGE */ 1068771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1068871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1068971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * At this point: 1069071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx = resolved base method [r0] 1069171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax = method->clazz [r9] 1069271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1069371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_RANGE_continue: 1069471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_super(%eax),%eax # eax<- method->clazz->super 1069571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl offMethod_methodIndex(%ecx),%ecx # ecx<- baseMthod->methodIndex 1069671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpl offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount) 1069771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jae .LOP_INVOKE_SUPER_RANGE_nsm # method not present in superclass 1069871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_vtable(%eax),%eax # eax<- ...clazz->super->vtable 1069971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%ecx,4),%eax # eax<- vtable[methodIndex] 1070071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_invokeMethodRange 1070171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1070271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1070371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* At this point: 1070471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx = null (needs to be resolved base method) 1070571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax = method->clazz 1070671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1070771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_RANGE_resolve: 1070871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%eax) # method->clazz 1070971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- method->clazz 1071071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%ecx # ecx<- BBBB 1071171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- resolver method type 1071271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) # arg1<- ref 1071371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveMethod # eax<- call(clazz, ref, flags) 1071471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # got null? 1071571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,%ecx # ecx<- resolved base method 1071671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%eax) # restore method->clazz 1071771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_INVOKE_SUPER_RANGE_continue # good to go - continue 1071871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # handle exception 1071971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1072071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1072171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Throw a NoSuchMethodError with the method name as the message. 1072271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx = resolved base method 1072371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1072471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_RANGE_nsm: 1072571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_name(%ecx),%eax 1072671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao mov %eax,OUT_ARG1(%esp) 1072771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_errNoSuchMethod 1072871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1072971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_DIRECT_RANGE */ 1073071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1073171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1073271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * On entry: 1073371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * TMP_SPILL <- "this" register 1073471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Things a bit ugly on this path, but it's the less 1073571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * frequent one. We'll have to do some reloading. 1073671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1073771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_DIRECT_RANGE_resolve: 1073871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) 107399f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 107409f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 1074171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # reference (BBBB or CCCC) 1074271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1074371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $METHOD_DIRECT,OUT_ARG2(%esp) 1074471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1074571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1074671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveMethod # eax<- call(clazz, ref, flags) 1074771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1074871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1074971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_INVOKE_DIRECT_RANGE_finish 1075071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1075171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1075271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_STATIC_RANGE */ 1075371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1075471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_STATIC_RANGE_continue: 1075571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $METHOD_STATIC,%eax 1075671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG2(%esp) # arg2<- flags 1075771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveMethod # call(clazz,ref,flags) 1075871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # got null? 1075971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne common_invokeMethodRange 1076071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1076171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1076271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_INTERFACE_RANGE */ 1076371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1076471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_INTERFACE_RANGE_continue: 1076571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex) 1076671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1076771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown 1076871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_invokeMethodRange 1076971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1077071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FLOAT_TO_INT */ 1077171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1077271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1077371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_INT_continue: 1077471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 0 1077571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0x80000000,%eax 1077671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao xorl 4(rFP,%ecx,4),%eax 1077771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao orl (rFP,%ecx,4),%eax 1077871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .else 1077971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpl $0x80000000,(rFP,%ecx,4) 1078071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1078171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_FLOAT_TO_INT_special_case # fix up result 1078271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1078371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_INT_finish: 1078471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 1078571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1078671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1078771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_INT_special_case: 1078871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao fnstsw %ax 1078971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sahf 1079071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jp .LOP_FLOAT_TO_INT_isNaN 1079171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao adcl $-1,(rFP,%ecx,4) 1079271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 0 1079371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao adcl $-1,4(rFP,%ecx,4) 1079471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1079571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_FLOAT_TO_INT_finish 1079671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_INT_isNaN: 1079771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,(rFP,%ecx,4) 1079871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 0 1079971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,4(rFP,%ecx,4) 1080071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1080171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_FLOAT_TO_INT_finish 1080271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1080371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FLOAT_TO_LONG */ 1080471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1080571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1080671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_LONG_continue: 1080771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 1 1080871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0x80000000,%eax 1080971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao xorl 4(rFP,%ecx,4),%eax 1081071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao orl (rFP,%ecx,4),%eax 1081171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .else 1081271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpl $0x80000000,(rFP,%ecx,4) 1081371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1081471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_FLOAT_TO_LONG_special_case # fix up result 1081571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1081671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_LONG_finish: 1081771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 1081871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1081971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1082071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_LONG_special_case: 1082171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao fnstsw %ax 1082271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sahf 1082371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jp .LOP_FLOAT_TO_LONG_isNaN 1082471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao adcl $-1,(rFP,%ecx,4) 1082571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 1 1082671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao adcl $-1,4(rFP,%ecx,4) 1082771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1082871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_FLOAT_TO_LONG_finish 1082971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FLOAT_TO_LONG_isNaN: 1083071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,(rFP,%ecx,4) 1083171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 1 1083271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,4(rFP,%ecx,4) 1083371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1083471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_FLOAT_TO_LONG_finish 1083571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1083671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DOUBLE_TO_INT */ 1083771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1083871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1083971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_INT_continue: 1084071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 0 1084171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0x80000000,%eax 1084271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao xorl 4(rFP,%ecx,4),%eax 1084371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao orl (rFP,%ecx,4),%eax 1084471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .else 1084571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpl $0x80000000,(rFP,%ecx,4) 1084671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1084771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_DOUBLE_TO_INT_special_case # fix up result 1084871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1084971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_INT_finish: 1085071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 1085171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1085271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1085371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_INT_special_case: 1085471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao fnstsw %ax 1085571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sahf 1085671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jp .LOP_DOUBLE_TO_INT_isNaN 1085771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao adcl $-1,(rFP,%ecx,4) 1085871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 0 1085971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao adcl $-1,4(rFP,%ecx,4) 1086071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1086171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_DOUBLE_TO_INT_finish 1086271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_INT_isNaN: 1086371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,(rFP,%ecx,4) 1086471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 0 1086571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,4(rFP,%ecx,4) 1086671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1086771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_DOUBLE_TO_INT_finish 1086871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1086971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DOUBLE_TO_LONG */ 1087071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1087171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1087271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_LONG_continue: 1087371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 1 1087471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0x80000000,%eax 1087571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao xorl 4(rFP,%ecx,4),%eax 1087671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao orl (rFP,%ecx,4),%eax 1087771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .else 1087871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpl $0x80000000,(rFP,%ecx,4) 1087971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1088071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je .LOP_DOUBLE_TO_LONG_special_case # fix up result 1088171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1088271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_LONG_finish: 1088371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 1088471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1088571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1088671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_LONG_special_case: 1088771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao fnstsw %ax 1088871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sahf 1088971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jp .LOP_DOUBLE_TO_LONG_isNaN 1089071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao adcl $-1,(rFP,%ecx,4) 1089171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 1 1089271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao adcl $-1,4(rFP,%ecx,4) 1089371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1089471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_DOUBLE_TO_LONG_finish 1089571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DOUBLE_TO_LONG_isNaN: 1089671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,(rFP,%ecx,4) 1089771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .if 1 1089871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,4(rFP,%ecx,4) 1089971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao .endif 1090071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_DOUBLE_TO_LONG_finish 1090171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1090271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DIV_INT */ 1090371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_continue_div: 1090471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cltd 1090571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao idivl %ecx 1090671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_finish_div: 1090771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 1090871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1090971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1091071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1091171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1091271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_REM_INT */ 1091371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_continue_div: 1091471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cltd 1091571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao idivl %ecx 1091671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_finish_div: 1091771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %edx rINST 1091871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1091971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1092071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1092171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1092271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_MUL_LONG */ 1092371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1092471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_MUL_LONG_continue: 1092571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal (%ecx,%edx),%edx # full result now in %edx:%eax 1092671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP2(%esi) # Restore Dalvik PC 1092771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %ecx # Fetch next instruction 1092871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,4(rFP,rINST,4) # v[B+1]<- %edx 1092971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,(rFP,rINST,4) # v[B]<- %eax 1093071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1093171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %ecx 1093271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1093371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DIV_LONG */ 1093471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1093571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_continue: 1093671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call __divdi3 1093771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_finish: 1093871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %edx rINST 1 1093971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 0 1094071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1094171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1094271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1094371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1094471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_check_zero: 1094571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %edx,%edx 1094671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_DIV_LONG_notSpecial 1094771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_errDivideByZero 1094871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_check_neg1: 1094971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %edx,%eax 1095071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_DIV_LONG_notSpecial 1095171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD %edx %ecx 0 1095271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD %ecx %ecx 1 1095371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %edx,%edx 1095471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_DIV_LONG_notSpecial1 1095571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpl $0x80000000,%ecx 1095671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_DIV_LONG_notSpecial1 1095771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* minint / -1, return minint on div, 0 on rem */ 1095871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao xorl %eax,%eax 1095971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0x80000000,%edx 1096071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_DIV_LONG_finish 1096171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1096271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_REM_LONG */ 1096371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1096471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_continue: 1096571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call __moddi3 1096671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_finish: 1096771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %edx rINST 1 1096871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 0 1096971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1097071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1097171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1097271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1097371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_check_zero: 1097471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %edx,%edx 1097571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_REM_LONG_notSpecial 1097671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_errDivideByZero 1097771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_check_neg1: 1097871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %edx,%eax 1097971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_REM_LONG_notSpecial 1098071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD %edx %ecx 0 1098171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD %ecx %ecx 1 1098271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %edx,%edx 1098371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_REM_LONG_notSpecial1 1098471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpl $0x80000000,%ecx 1098571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_REM_LONG_notSpecial1 1098671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* minint / -1, return minint on div, 0 on rem */ 1098771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao xorl %eax,%eax 1098871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,%edx 1098971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_REM_LONG_finish 1099071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1099171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SHL_LONG */ 1099271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1099371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SHL_LONG_finish: 1099471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 0 # v[AA+0]<- %eax 1099571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1099671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1099771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1099871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SHR_LONG */ 1099971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1100071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1100171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SHR_LONG_finish: 1100271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 0 # v[AA+0]<- eax 1100371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1100471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1100571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1100671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_USHR_LONG */ 1100771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1100871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1100971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_USHR_LONG_finish: 1101071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 0 # v[BB+0]<- eax 1101171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1101271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1101371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1101471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DIV_INT_2ADDR */ 1101571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_2ADDR_continue_div2addr: 1101671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cltd 1101771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao idivl %ecx 1101871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_2ADDR_finish_div2addr: 1101971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 1102071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 1 %edx 1102171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 1102271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1102371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1102471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_REM_INT_2ADDR */ 1102571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_2ADDR_continue_div2addr: 1102671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cltd 1102771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao idivl %ecx 1102871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_2ADDR_finish_div2addr: 1102971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %edx rINST 1103071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 1 %edx 1103171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 1103271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1103371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1103471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_MUL_LONG_2ADDR */ 1103571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1103671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_MUL_LONG_2ADDR_continue: 1103771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal (%ecx,%edx),%edx # full result now in %edx:%eax 1103871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,4(%esi) # v[A+1]<- %edx 1103971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,(%esi) # v[A]<- %eax 1104071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP2(%esi) 1104171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 1 %ecx 1104271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL(rFP) 1104371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 1104471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %ecx 1104571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1104671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DIV_LONG_2ADDR */ 1104771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1104871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_2ADDR_continue: 1104971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG3(%esp) 1105071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) 1105171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) 1105271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call __divdi3 1105371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_2ADDR_finish: 1105471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %edx rINST 1 1105571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 0 1105671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 1 %edx 1105771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 1105871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1105971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1106071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_2ADDR_check_zero: 1106171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %edx,%edx 1106271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_DIV_LONG_2ADDR_notSpecial 1106371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_errDivideByZero 1106471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_LONG_2ADDR_check_neg1: 1106571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %edx,%eax 1106671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_DIV_LONG_2ADDR_notSpecial 1106771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD %edx rINST 0 1106871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD %ecx rINST 1 1106971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %edx,%edx 1107071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_DIV_LONG_2ADDR_notSpecial1 1107171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpl $0x80000000,%ecx 1107271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_DIV_LONG_2ADDR_notSpecial1 1107371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* minint / -1, return minint on div, 0 on rem */ 1107471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao xorl %eax,%eax 1107571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0x80000000,%edx 1107671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_DIV_LONG_2ADDR_finish 1107771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1107871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_REM_LONG_2ADDR */ 1107971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1108071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_2ADDR_continue: 1108171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG3(%esp) 1108271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) 1108371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) 1108471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call __moddi3 1108571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_2ADDR_finish: 1108671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %edx rINST 1 1108771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 0 1108871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 1 %edx 1108971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 1109071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1109171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1109271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_2ADDR_check_zero: 1109371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %edx,%edx 1109471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_REM_LONG_2ADDR_notSpecial 1109571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_errDivideByZero 1109671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_LONG_2ADDR_check_neg1: 1109771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %edx,%eax 1109871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_REM_LONG_2ADDR_notSpecial 1109971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD %edx rINST 0 1110071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD %ecx rINST 1 1110171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %edx,%edx 1110271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_REM_LONG_2ADDR_notSpecial1 1110371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpl $0x80000000,%ecx 1110471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_REM_LONG_2ADDR_notSpecial1 1110571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* minint / -1, return minint on div, 0 on rem */ 1110671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao xorl %eax,%eax 1110771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,%edx 1110871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_REM_LONG_2ADDR_finish 1110971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1111071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SHL_LONG_2ADDR */ 1111171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1111271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1111371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SHL_LONG_2ADDR_finish: 1111471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 1 %edx 1111571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 0 # v[AA+0]<- eax 1111671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 1111771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1111871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1111971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SHR_LONG_2ADDR */ 1112071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1112171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1112271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SHR_LONG_2ADDR_finish: 1112371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 1 %edx 1112471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 0 # v[AA+0]<- eax 11125f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 11126f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 11127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1112871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_USHR_LONG_2ADDR */ 1112971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1113071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1113171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_USHR_LONG_2ADDR_finish: 1113271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 1 %edx 1113371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 0 # v[AA+0]<- eax 1113471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 1 1113571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1113671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1113771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DIV_INT_LIT16 */ 1113871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_LIT16_continue_div: 1113971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cltd 1114071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao idivl %ecx 1114171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_LIT16_finish_div: 1114271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 1114371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1114471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1114571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1114671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1114771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_REM_INT_LIT16 */ 1114871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_LIT16_continue_div: 1114971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cltd 1115071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao idivl %ecx 1115171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_LIT16_finish_div: 1115271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %edx rINST 1115371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1115471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1115571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1115671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1115771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_DIV_INT_LIT8 */ 1115871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_LIT8_continue_div: 1115971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cltd 1116071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao idivl %ecx 1116171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_DIV_INT_LIT8_finish_div: 1116271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 1116371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1116471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1116571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1116671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1116771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_REM_INT_LIT8 */ 1116871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_LIT8_continue_div: 1116971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cltd 1117071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao idivl %ecx 1117171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_REM_INT_LIT8_finish_div: 1117271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %edx rINST 1117371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1117471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1117571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1117671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1117771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_VOLATILE */ 1117871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1117971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1118071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_VOLATILE_resolve: 1118171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 111829f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1118371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1118471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1118571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1118671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1118771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1118871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1118971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_VOLATILE_finish 1119071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1119171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1119271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_VOLATILE_finish: 1119371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1119471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1119571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1119671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1119771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 1119871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1119971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1120071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1120171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1120271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 1120371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- A 1120471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1120571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 1120671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1120771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1120871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1120971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_VOLATILE */ 1121071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1121171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1121271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_VOLATILE_resolve: 1121371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 112149f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1121571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1121671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1121771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1121871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1121971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1122071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1122171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_VOLATILE_finish 1122271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1122371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1122471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_VOLATILE_finish: 1122571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1122671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1122771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1122871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1122971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 1123071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1123171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[A] 1123271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1123371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1123471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1123571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1123671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,(%ecx,%eax,1) # obj.field <- v[A](8/16/32 bits) 1123771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1123871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1123971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1124071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_VOLATILE */ 1124171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1124271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1124371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1124471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1124571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_VOLATILE_resolve: 112469f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1124771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 112489f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1124971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1125071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1125171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1125271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1125371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1125471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1125571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_VOLATILE_finish # success, continue 1125671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1125771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1125871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_VOLATILE */ 1125971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1126071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1126171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1126271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1126371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_VOLATILE_resolve: 112649f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1126571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 112669f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1126771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1126871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1126971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1127071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1127171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1127271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1127371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_VOLATILE_finish # success, continue 1127471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1127571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1127671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_OBJECT_VOLATILE */ 1127771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1127871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1127971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_VOLATILE_resolve: 1128071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 112819f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1128271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1128371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1128471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1128571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1128671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1128771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1128871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_OBJECT_VOLATILE_finish 1128971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1129071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1129171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_VOLATILE_finish: 1129271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1129371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1129471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1129571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1129671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 1129771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1129871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1129971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1130071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1130171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 1130271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- A 1130371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1130471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 1130571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1130671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1130771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1130871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_EXECUTE_INLINE */ 1130971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1131071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_EXECUTE_INLINE_continue: 1131171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1131271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Extract args, call function. 1131371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx = #of args (0-4) 1131471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax = call index 1131571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * @esp = return addr 1131671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * esp is -4 from normal 1131771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 1131871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go ahead and load all 4 args, even if not used. 1131971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1132071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 4(rPC),%edx 1132171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1132271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0xf,%ecx 1132371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao andl %edx,%ecx 1132471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx 1132571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sarl $4,%edx 1132671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,4+OUT_ARG0(%esp) 1132771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1132871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0xf,%ecx 1132971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao andl %edx,%ecx 1133071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx 1133171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sarl $4,%edx 1133271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,4+OUT_ARG1(%esp) 1133371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1133471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0xf,%ecx 1133571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao andl %edx,%ecx 1133671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx 1133771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sarl $4,%edx 1133871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,4+OUT_ARG2(%esp) 1133971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1134071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0xf,%ecx 1134171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao andl %edx,%ecx 1134271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx 1134371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sarl $4,%edx 1134471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,4+OUT_ARG3(%esp) 1134571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1134671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao sall $4,%eax # index *= sizeof(table entry) 1134771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp *gDvmInlineOpsTable(%eax) 1134871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao # will return to caller of .LOP_EXECUTE_INLINE_continue 1134971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1135071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_OBJECT_QUICK */ 1135171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1135271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_QUICK_finish: 1135371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl rINST,rINST # did we store null? 1135471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 113559f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_cardTable(%eax),%eax # get card table base 1135671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 1f # skip card mark if null store 1135771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao shrl $GC_CARD_SHIFT,%ecx # object head to card number 1135871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb %al,(%eax,%ecx) # mark card based on object head 1135971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1: 1136071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1136171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1136271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1136371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_OBJECT_VOLATILE */ 1136471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1136571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1136671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_VOLATILE_resolve: 1136771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 113689f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1136971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1137071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1137171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1137271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1137371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1137471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1137571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_OBJECT_VOLATILE_finish 1137671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1137771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1137871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_VOLATILE_finish: 1137971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1138071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1138171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1138271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1138371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * %edx is scratch, but needs to be unspilled 1138471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds A 1138571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1138671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[A] 1138771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1138871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1138971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1139071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,(%ecx,%eax) # obj.field <- v[A](8/16/32 bits) 113919f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 1139271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl rINST,rINST # stored a NULL? 113939f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_cardTable(%eax),%eax # get card table base 1139471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1139571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 1f # skip card mark if null store 1139671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao shrl $GC_CARD_SHIFT,%ecx # object head to card number 1139771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb %al,(%eax,%ecx) # mark card using object head 1139871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1: 1139971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1140071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1140171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1140271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_OBJECT_VOLATILE */ 1140371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1140471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1140571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1140671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1140771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_OBJECT_VOLATILE_resolve: 114089f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1140971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 114109f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1141171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1141271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1141371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1141471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1141571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1141671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1141771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_OBJECT_VOLATILE_finish # success, continue 1141871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1141971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1142071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_OBJECT_VOLATILE */ 1142171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1142271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1142371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_VOLATILE_continue: 1142471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,offStaticField_value(%eax) # do the store 1142571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # stored null object ptr? 1142671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 2 %edx 1142771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 1f # skip card mark if null 114289f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1142971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offField_clazz(%eax),%eax # eax<- method->clazz 114309f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_cardTable(%ecx),%ecx # get card table base 1143171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao shrl $GC_CARD_SHIFT,%eax # head to card number 1143271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb %cl,(%ecx,%eax) # mark card 1143371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1: 1143471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 1143571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1143671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1143771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_VOLATILE_resolve: 114389f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1143971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 2(rPC),%eax # eax<- field ref BBBB 114409f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1144171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1144271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1144371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1144471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1144571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1144671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1144771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_OBJECT_VOLATILE_finish # success, continue 1144871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1144971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1145071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CONST_CLASS_JUMBO */ 1145171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1145271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* This is the less common path, so we'll redo some work 1145371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao here rather than force spills on the common path */ 1145471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CONST_CLASS_JUMBO_resolve: 114559f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 1145671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 114579f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%eax),%eax # eax<- self->method 1145871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $1,OUT_ARG2(%esp) # true 1145971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%ecx # ecx<- AAAAAAAA 1146071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%eax),%eax 1146171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) 1146271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) 1146371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveClass # go resolve 1146471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # failed? 1146571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown 1146671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 1146771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 1146871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 1146971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1147071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1147171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_CHECK_CAST_JUMBO */ 11472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1147371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1147471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Trivial test failed, need to perform full check. This is common. 1147571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds obj->clazz 1147671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds class resolved from AAAAAAAA 1147771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds object 1147871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1147971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_JUMBO_fullcheck: 1148071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,sReg0 # we'll need the desired class on failure 1148171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1148271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1148371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmInstanceofNonTrivial # eax<- boolean result 1148471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # failed? 1148571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_CHECK_CAST_JUMBO_okay # no, success 11486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1148771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao # A cast has failed. We need to throw a ClassCastException. 1148871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 1148971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(rINST),%eax 1149071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- obj->clazz 1149171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl sReg0,%ecx 1149271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) # arg1<- desired class 1149371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmThrowClassCastException 1149471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 11495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1149671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1149771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Resolution required. This is the least-likely path, and we're 1149871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * going to have to recreate some data. 1149971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 1150071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds object 1150171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1150271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_CHECK_CAST_JUMBO_resolve: 115039f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1150471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 1150571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- AAAAAAAA 115069f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 1150771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) # arg1<- AAAAAAAA 1150871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- metho->clazz 1150971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,OUT_ARG2(%esp) # arg2<- false 1151071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 1151171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveClass # eax<- resolved ClassObject ptr 1151271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # got null? 1151371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # yes, handle exception 1151471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(rINST),%ecx # ecx<- obj->clazz 1151571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_CHECK_CAST_JUMBO_resolved # pick up where we left off 11516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1151771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INSTANCE_OF_JUMBO */ 1151871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1151971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1152071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Trivial test failed, need to perform full check. This is common. 1152171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds obj->clazz 1152271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds class resolved from BBBB 1152371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST has BA 1152471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1152571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_fullcheck: 1152671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) 1152771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) 1152871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmInstanceofNonTrivial # eax<- boolean result 1152971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao # fall through to OP_INSTANCE_OF_JUMBO_store 1153071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1153171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1153271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds boolean result 1153371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 1153471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1153571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_store: 1153671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1153771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 1153871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST # vBBBB<- eax 11539f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 11540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1154171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1154271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Trivial test succeeded, save and bail. 1154371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * r9 holds BBBB 1154471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1154571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_trivial: 1154671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1154771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 1154871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $1,%eax 1154971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST # vBBBB<- true 1155071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 11551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1155271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1155371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Resolution required. This is the least-likely path. 1155471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 1155571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * edx holds AAAAAAAA 1155671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1155771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INSTANCE_OF_JUMBO_resolve: 1155871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG1(%esp) # arg1<- AAAAAAAA 115599f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 115609f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx 1156171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $1,OUT_ARG2(%esp) # arg2<- true 1156271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1156371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 1156471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) # arg0<- method->clazz 1156571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveClass # eax<- resolved ClassObject ptr 1156671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # success? 1156771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # no, handle exception 1156871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* Now, we need to sync up with fast path. We need eax to 1156971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * hold the obj->clazz, and ecx to hold the resolved class 1157071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1157171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,%ecx # ecx<- resolved class 1157271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%eax # eax<- CCCC 1157371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %eax %eax # eax<- vCCCC (obj) 1157471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(%eax),%eax # eax<- obj->clazz 1157571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LOP_INSTANCE_OF_JUMBO_resolved 11576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1157771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_NEW_INSTANCE_JUMBO */ 11578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1157971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_initialized: # on entry, ecx<- class 1158071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* TODO: remove test for interface/abstract, now done in verifier */ 1158171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl $(ACC_INTERFACE|ACC_ABSTRACT),offClassObject_accessFlags(%ecx) 1158271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $ALLOC_DONT_TRACK,OUT_ARG1(%esp) 1158371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_NEW_INSTANCE_JUMBO_abstract 1158471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_finish: # ecx=class 1158571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1158671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmAllocObject # eax<- new object 1158771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 1158871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # success? 1158971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # no, bail out 1159071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 1159171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 1159271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1159371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1159471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1159571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Class initialization required. 1159671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 1159771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds class object 1159871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1159971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_needinit: 1160071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save object 1160171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1160271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmInitClass # initialize class 1160371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) # restore object 1160471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # success? 1160571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_NEW_INSTANCE_JUMBO_initialized # success, continue 1160671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # go deal with init exception 1160771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1160871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1160971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Resolution required. This is the least-likely path. 1161071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 1161171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1161271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_resolve: 116139f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1161471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- AAAAAAAA 116159f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 1161671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1161771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1161871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,OUT_ARG2(%esp) 1161971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1162071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveClass # call(clazz,off,flags) 1162171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,%ecx # ecx<- resolved ClassObject ptr 1162271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # success? 1162371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_NEW_INSTANCE_JUMBO_resolved # good to go 1162471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1162571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1162671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1162771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * TODO: remove this 1162871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * We can't instantiate an abstract class or interface, so throw an 1162971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * InstantiationError with the class descriptor as the message. 1163071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 1163171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds class object 1163271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1163371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_INSTANCE_JUMBO_abstract: 1163471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_descriptor(%ecx),%eax 1163571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $.LstrInstantiationError,OUT_ARG0(%esp) 1163671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1163771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmThrowExceptionWithClassMessage 1163871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1163971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1164071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_NEW_ARRAY_JUMBO */ 1164171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1164271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1164371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Resolve class. (This is an uncommon case.) 1164471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds class (null here) 1164571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds array length (vCCCC) 1164671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1164771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_ARRAY_JUMBO_resolve: 116489f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1164971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%eax) # save array length 116509f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 1165171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- AAAAAAAA 1165271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1165371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1165471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $0,OUT_ARG2(%esp) 1165571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1165671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveClass # eax<- call(clazz,ref,flag) 1165771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,%ecx 1165871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%eax) 1165971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # successful resolution? 1166071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # no, bail. 1166171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao# fall through to OP_NEW_ARRAY_JUMBO_finish 1166271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1166371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1166471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Finish allocation 1166571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 1166671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds class 1166771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds array length (vCCCC) 1166871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1166971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_NEW_ARRAY_JUMBO_finish: 1167071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1167171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1167271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) 1167371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmAllocArrayByClass # eax<- call(clazz,length,flags) 1167471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1167571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # failed? 1167671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # yup - go handle 1167771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %eax rINST 1167871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 1167971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1168071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1168171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_FILLED_NEW_ARRAY_JUMBO */ 1168271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1168371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_JUMBO_more: 1168471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%eax),%eax # eax<- method->clazz 1168571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- clazz 1168671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveClass # eax<- call(clazz,ref,flag) 1168771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # null? 1168871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # yes, handle it 1168971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1169071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao # note: fall through to .LOP_FILLED_NEW_ARRAY_JUMBO_continue 1169171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1169271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1169371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * On entry: 1169471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds array class [r0] 1169571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx is scratch 1169671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1169771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_JUMBO_continue: 1169871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_descriptor(%eax),%ecx # ecx<- arrayClass->descriptor 1169971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $ALLOC_DONT_TRACK,OUT_ARG2(%esp) # arg2<- flags 1170071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzbl 1(%ecx),%ecx # ecx<- descriptor[1] 1170171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- arrayClass 117029f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 1170371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpb $'I',%cl # supported? 1170471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 1f 1170571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpb $'L',%cl 1170671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 1f 1170771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpb $'[',%cl 1170871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_FILLED_NEW_ARRAY_JUMBO_notimpl # no, not handled yet 1170971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1: 117109f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx,offThread_retval+4(%eax) # save type 1171171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,OUT_ARG1(%esp) # arg1<- BBBB (length) 1171271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmAllocArrayByClass # eax<- call(arrayClass, length, flags) 117139f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1171471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # alloc successful? 1171571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown # no, handle exception 117169f601a917c8878204482c37aec7005054b6776fabuzbee movl %eax,offThread_retval(%ecx) # retval.l<- new array 1171771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 1171871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal offArrayObject_contents(%eax),%eax # eax<- newArray->contents 11719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1172071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* at this point: 1172171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax is pointer to tgt 1172271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST is length 1172371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx is CCCC 1172471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * We now need to copy values from registers into the array 1172571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 11726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1172771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao # set up src pointer 1172871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP2(%esi) 1172971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP3(%edi) 1173071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal (rFP,%ecx,4),%esi # set up src ptr 1173171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,%edi # set up dst ptr 1173271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%ecx # load count register 1173371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao rep 1173471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movsd 1173571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP2(%esi) 1173671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP3(%edi) 117379f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 117389f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_retval+4(%ecx),%eax # eax<- type 1173971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 11740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1174171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpb $'I',%al # Int array? 1174271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 5f # skip card mark if so 117439f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_retval(%ecx),%eax # eax<- object head 117449f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_cardTable(%ecx),%ecx # card table base 1174571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao shrl $GC_CARD_SHIFT,%eax # convert to card num 1174671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb %cl,(%ecx,%eax) # mark card based on object head 1174771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao5: 1174871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 1174971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 11750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 11751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1175271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1175371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Throw an exception indicating that we have not implemented this 1175471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * mode of filled-new-array. 1175571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1175671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_FILLED_NEW_ARRAY_JUMBO_notimpl: 1175771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $.LstrInternalErrorA,%eax 1175871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) 1175971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $.LstrFilledNewArrayNotImplA,%eax 1176071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1176171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmThrowException 1176271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 11763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1176471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_JUMBO */ 11765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 11766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1176771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_JUMBO_resolve: 1176871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 117699f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1177071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1177171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1177271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1177371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1177471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1177571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1177671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_JUMBO_finish 1177771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 11778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1177971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_JUMBO_finish: 1178071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1178171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1178271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1178371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1178471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 1178571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1178671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1178771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1178871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1178971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 1179071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- BBBB 1179171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1179271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 1179371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 11794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 11795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1179671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_WIDE_JUMBO */ 11797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 11798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1179971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_WIDE_JUMBO_resolve: 1180071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 118019f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1180271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1180371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save objpointer across call 1180471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rPC,OUT_ARG0(%esp) # pass in method->clazz 1180571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1180671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1180771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1180871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_WIDE_JUMBO_finish 1180971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 11810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1181171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_WIDE_JUMBO_finish: 1181271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1181371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1181471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1181571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1181671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 1181771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1181871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1181971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1182071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1182171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal (%ecx,%eax,1),%eax # eax<- address of field 1182271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax),%ecx # ecx<- lsw 1182371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 4(%eax),%eax # eax<- msw 1182471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1182571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %ecx rINST 0 1182671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG_WORD %eax rINST 1 1182771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 11828f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 11829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1183071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_OBJECT_JUMBO */ 11831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 11832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1183371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_JUMBO_resolve: 1183471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 118359f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1183671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1183771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1183871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1183971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1184071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1184171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1184271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_OBJECT_JUMBO_finish 1184371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1184471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1184571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_OBJECT_JUMBO_finish: 1184671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1184771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1184871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1184971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1185071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 1185171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1185271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1185371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1185471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1185571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 1185671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- BBBB 1185771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1185871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 1185971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 11860f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 11861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1186271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_BOOLEAN_JUMBO */ 11863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 11864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1186571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BOOLEAN_JUMBO_resolve: 1186671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 118679f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1186871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1186971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1187071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1187171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1187271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1187371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1187471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_BOOLEAN_JUMBO_finish 1187571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1187671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1187771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BOOLEAN_JUMBO_finish: 1187871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1187971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1188071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1188171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1188271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 1188371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1188471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1188571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1188671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1188771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 1188871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- BBBB 1188971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1189071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 1189171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 11892f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 11893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1189471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_BYTE_JUMBO */ 11895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 11896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1189771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BYTE_JUMBO_resolve: 1189871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 118999f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1190071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1190171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1190271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1190371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1190471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1190571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1190671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_BYTE_JUMBO_finish 1190771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 11908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1190971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_BYTE_JUMBO_finish: 1191071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1191171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1191271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1191371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1191471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 1191571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1191671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1191771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1191871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1191971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movsbl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 1192071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- BBBB 1192171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1192271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 1192371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 1192471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 11925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1192671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_CHAR_JUMBO */ 11927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 11928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1192971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_CHAR_JUMBO_resolve: 1193071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 119319f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1193271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1193371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1193471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1193571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1193671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1193771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1193871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_CHAR_JUMBO_finish 1193971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 11940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1194171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_CHAR_JUMBO_finish: 1194271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1194371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1194471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1194571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1194671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 1194771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1194871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1194971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1195071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1195171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 1195271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- BBBB 1195371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1195471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 1195571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 11956f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 11957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1195871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IGET_SHORT_JUMBO */ 11959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 11960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1196171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_SHORT_JUMBO_resolve: 1196271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 119639f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1196471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1196571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1196671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1196771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1196871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1196971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1197071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IGET_SHORT_JUMBO_finish 1197171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 11972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1197371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IGET_SHORT_JUMBO_finish: 1197471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1197571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1197671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1197771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1197871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 1197971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1198071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1198171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1198271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1198371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movswl (%ecx,%eax,1),%ecx # ecx<- obj.field (8/16/32 bits) 1198471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,%eax # eax<- BBBB 1198571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1198671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SET_VREG %ecx %eax 1198771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 11988f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 11989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1199071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_JUMBO */ 11991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 11992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1199371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_JUMBO_resolve: 1199471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 119959f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1199671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1199771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1199871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1199971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1200071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1200171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1200271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_JUMBO_finish 1200371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1200471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1200571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_JUMBO_finish: 1200671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1200771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1200871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1200971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1201071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 1201171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1201271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[BBBB] 1201371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1201471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1201571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1201671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1201771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,(%ecx,%eax,1) # obj.field <- v[BBBB](8/16/32 bits) 1201871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 12019f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 12020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1202171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_WIDE_JUMBO */ 12022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1202471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_WIDE_JUMBO_resolve: 1202571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 120269f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1202771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1202871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1202971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1203071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1203171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1203271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # ... which returns InstrField ptr 1203371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_WIDE_JUMBO_finish 1203471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 12035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1203671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_WIDE_JUMBO_finish: 1203771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1203871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1203971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1204071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1204171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * %edx is scratch, but needs to be unspilled 1204271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 1204371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1204471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1204571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1204671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1204771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao leal (%ecx,%eax,1),%eax # eax<- address of field 1204871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD %ecx rINST 0 # ecx<- lsw 1204971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_WORD rINST rINST 1 # rINST<- msw 1205071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1205171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,4(%eax) 1205271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,(%eax) 1205371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 12054f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 12055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1205671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_OBJECT_JUMBO */ 12057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1205971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_JUMBO_resolve: 1206071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 120619f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1206271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1206371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1206471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1206571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1206671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1206771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1206871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_OBJECT_JUMBO_finish 1206971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1207071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1207171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_OBJECT_JUMBO_finish: 1207271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1207371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1207471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1207571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1207671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * %edx is scratch, but needs to be unspilled 1207771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 1207871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1207971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[BBBB] 1208071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1208171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1208271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1208371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST,(%ecx,%eax) # obj.field <- v[BBBB](8/16/32 bits) 120849f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 1208571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl rINST,rINST # stored a NULL? 120869f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_cardTable(%eax),%eax # get card table base 1208771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1208871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 1f # skip card mark if null store 1208971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao shrl $GC_CARD_SHIFT,%ecx # object head to card number 1209071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb %al,(%eax,%ecx) # mark card using object head 1209171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1: 1209271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 12093f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 12094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1209571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_BOOLEAN_JUMBO */ 12096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1209871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BOOLEAN_JUMBO_resolve: 1209971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 121009f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1210171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1210271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1210371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1210471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1210571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1210671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1210771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_BOOLEAN_JUMBO_finish 1210871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 1210971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1211071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BOOLEAN_JUMBO_finish: 1211171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1211271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1211371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1211471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1211571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 1211671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1211771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[BBBB] 1211871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1211971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1212071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1212171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1212271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb rINSTbl,(%ecx,%eax,1) # obj.field <- v[BBBB](8/16/32 bits) 1212371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 12124f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 12125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1212671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_BYTE_JUMBO */ 12127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1212971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BYTE_JUMBO_resolve: 1213071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC 121319f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 1213271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%edx),%edx # edx<- method->clazz 1213371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) # save obj pointer across call 1213471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 1213571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveInstField # ... to dvmResolveInstField 1213671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1213771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1213871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_BYTE_JUMBO_finish 1213971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 12140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1214171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_BYTE_JUMBO_finish: 1214271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1214371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Currently: 1214471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax holds resolved field 1214571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx holds object 1214671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 1214771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1214871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[BBBB] 1214971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1215071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1215171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1215271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1215371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb rINSTbl,(%ecx,%eax,1) # obj.field <- v[BBBB](8/16/32 bits) 1215471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 12155f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 12156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1215771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_CHAR_JUMBO */ 121583d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 121593d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1216071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_CHAR_JUMBO_resolve: 12161f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 121629f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 12163f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 12164f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 1216571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %edx,OUT_ARG0(%esp) # pass in method->clazz 12166f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 12167f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 1216871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # returns InstrField ptr 1216971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_CHAR_JUMBO_finish 121703d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown 121713d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1217271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_CHAR_JUMBO_finish: 121733d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 121743d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Currently: 121753d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * eax holds resolved field 121763d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * ecx holds object 1217771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 12178f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 1217971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[BBBB] 1218071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 1218171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # object null? 1218271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # object was null 1218371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1218471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movw rINSTw,(%ecx,%eax,1) # obj.field <- v[BBBB](8/16/32 bits) 1218571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 12186f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 121873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1218871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_IPUT_SHORT_JUMBO */ 121893d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 121903d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1219171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_SHORT_JUMBO_resolve: 12192f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 121939f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%edx),%edx # edx<- current method 12194f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(%edx),%edx # edx<- method->clazz 12195f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP1(%ecx) # save obj pointer across call 12196f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edx,OUT_ARG0(%esp) # pass in method->clazz 12197f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmResolveInstField # ... to dvmResolveInstField 12198f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP1(%ecx) 12199f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee testl %eax,%eax # returns InstrField ptr 1220071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_IPUT_SHORT_JUMBO_finish 122013d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown 122023d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1220371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_IPUT_SHORT_JUMBO_finish: 122043d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 122053d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Currently: 122063d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * eax holds resolved field 122073d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * ecx holds object 1220871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINST holds BBBB 122093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 1221071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R rINST rINST # rINST<- v[BBBB] 122113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offInstField_byteOffset(%eax),%eax # eax<- byte offset of field 122123d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %ecx,%ecx # object null? 122133d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee je common_errNullObject # object was null 1221471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 5 %edx 1221571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movw rINSTw,(%ecx,%eax,1) # obj.field <- v[BBBB](8/16/32 bits) 1221671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 5 1221771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GOTO_NEXT_R %edx 1221871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1221971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_JUMBO */ 1222071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1222171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1222271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1222371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1222471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_JUMBO_resolve: 122259f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1222671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 122279f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1222871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1222971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1223071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1223171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1223271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1223371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1223471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_JUMBO_finish # success, continue 1223571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1223671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1223771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_WIDE_JUMBO */ 1223871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1223971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1224071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1224171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1224271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_WIDE_JUMBO_resolve: 122439f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1224471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 122459f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1224671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1224771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1224871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1224971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1225071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1225171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1225271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_WIDE_JUMBO_finish # success, continue 1225371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1225471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1225571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_OBJECT_JUMBO */ 1225671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1225771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1225871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1225971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1226071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_OBJECT_JUMBO_resolve: 122619f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1226271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 122639f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1226471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1226571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1226671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1226771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1226871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1226971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1227071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_OBJECT_JUMBO_finish # success, continue 1227171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1227271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1227371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_BOOLEAN_JUMBO */ 1227471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1227571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1227671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1227771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1227871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BOOLEAN_JUMBO_resolve: 122799f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1228071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 122819f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1228271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1228371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1228471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1228571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1228671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1228771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1228871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_BOOLEAN_JUMBO_finish # success, continue 1228971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1229071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1229171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_BYTE_JUMBO */ 1229271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1229371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1229471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1229571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1229671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_BYTE_JUMBO_resolve: 122979f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1229871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 122999f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1230071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1230171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1230271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1230371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1230471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1230571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1230671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_BYTE_JUMBO_finish # success, continue 1230771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1230871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1230971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_CHAR_JUMBO */ 1231071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1231171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1231271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1231371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1231471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_CHAR_JUMBO_resolve: 123159f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1231671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 123179f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1231871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1231971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1232071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1232171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1232271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1232371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1232471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_CHAR_JUMBO_finish # success, continue 1232571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1232671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1232771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SGET_SHORT_JUMBO */ 1232871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1232971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1233071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1233171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1233271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SGET_SHORT_JUMBO_resolve: 123339f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1233471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 123359f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1233671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1233771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1233871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1233971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1234071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1234171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1234271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SGET_SHORT_JUMBO_finish # success, continue 1234371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1234471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1234571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_JUMBO */ 1234671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1234771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1234871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1234971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1235071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_JUMBO_resolve: 123519f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1235271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 123539f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1235471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1235571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1235671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1235771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1235871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1235971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1236071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_JUMBO_finish # success, continue 1236171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1236271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1236371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_WIDE_JUMBO */ 1236471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1236571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1236671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1236771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1236871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_WIDE_JUMBO_resolve: 123699f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1237071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 123719f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1237271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1237371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1237471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1237571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1237671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1237771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1237871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_WIDE_JUMBO_finish # success, continue 1237971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1238071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1238171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_OBJECT_JUMBO */ 1238271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1238371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1238471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_JUMBO_continue: 1238571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,offStaticField_value(%eax) # do the store 1238671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # stored null object ptr? 1238771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao FETCH_INST_OPCODE 4 %edx 1238871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je 1f # skip card mark if null 123899f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1239071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offField_clazz(%eax),%eax # eax<- method->clazz 123919f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_cardTable(%ecx),%ecx # get card table base 1239271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao shrl $GC_CARD_SHIFT,%eax # head to card number 1239371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movb %cl,(%ecx,%eax) # mark card 1239471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao1: 1239571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 4 12396f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 123973d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1239871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_OBJECT_JUMBO_resolve: 123999f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1240071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 124019f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1240271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1240371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1240471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1240571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1240671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1240771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1240871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_OBJECT_JUMBO_finish # success, continue 1240971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1241071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1241171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_BOOLEAN_JUMBO */ 1241271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1241371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1241471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 1241571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1241671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BOOLEAN_JUMBO_resolve: 124179f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1241871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 124199f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1242071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1242171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1242271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1242371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1242471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1242571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1242671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_BOOLEAN_JUMBO_finish # success, continue 1242771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 1242871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1242971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_BYTE_JUMBO */ 124303d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 124313d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 124323d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Go resolve the field 124333d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 1243471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_BYTE_JUMBO_resolve: 124359f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1243671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 124379f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 12438f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 124393d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 124403d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %eax,OUT_ARG1(%esp) 124413d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,OUT_ARG0(%esp) 124423d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveStaticField # eax<- resolved StaticField ptr 124433d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax 1244471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_BYTE_JUMBO_finish # success, continue 124453d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown # no, handle exception 124463d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1244771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_CHAR_JUMBO */ 124483d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 124493d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 124503d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * Go resolve the field 124513d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 1245271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_CHAR_JUMBO_resolve: 124539f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1245471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 124559f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 12456f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 124573d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 124583d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %eax,OUT_ARG1(%esp) 124593d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee movl %ecx,OUT_ARG0(%esp) 124603d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee call dvmResolveStaticField # eax<- resolved StaticField ptr 124613d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee testl %eax,%eax 1246271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_CHAR_JUMBO_finish # success, continue 124633d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee jmp common_exceptionThrown # no, handle exception 124643d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1246571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_SPUT_SHORT_JUMBO */ 12466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 1246871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Go resolve the field 12469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1247071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_SPUT_SHORT_JUMBO_resolve: 124719f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 1247271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # eax<- field ref AAAAAAAA 124739f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- current method 1247471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao EXPORT_PC # could throw, need to export 1247571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1247671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1247771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1247871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveStaticField # eax<- resolved StaticField ptr 1247971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1248071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_SPUT_SHORT_JUMBO_finish # success, continue 1248171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # no, handle exception 12482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1248371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_VIRTUAL_JUMBO */ 12484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1248671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_JUMBO_more: 1248771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%eax),%eax # ecx<- method->clazz 1248871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- clazz 1248971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- flags 1249071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveMethod # eax<- call(clazz, ref, flags) 1249171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # got null? 1249271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_INVOKE_VIRTUAL_JUMBO_continue # no, continue 1249371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # yes, handle exception 12494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1249571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* At this point: 1249671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax = resolved base method 1249771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx = scratch 1249871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1249971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_VIRTUAL_JUMBO_continue: 1250071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC),%ecx # ecx<- CCCC 1250171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao GET_VREG_R %ecx %ecx # ecx<- "this" 1250271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl offMethod_methodIndex(%eax),%eax # eax<- baseMethod->methodIndex 1250371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %ecx,%ecx # null this? 1250471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_errNullObject # go if so 1250571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offObject_clazz(%ecx),%ecx # ecx<- thisPtr->clazz 1250671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_vtable(%ecx),%ecx # ecx<- thisPtr->clazz->vtable 1250771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%ecx,%eax,4),%eax # eax<- vtable[methodIndex] 1250871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_invokeMethodJumbo 125093d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1251071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_SUPER_JUMBO */ 125113d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1251271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1251371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * At this point: 1251471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx = resolved base method [r0] 1251571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax = method->clazz [r9] 1251671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1251771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_JUMBO_continue: 1251871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_super(%eax),%eax # eax<- method->clazz->super 1251971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl offMethod_methodIndex(%ecx),%ecx # ecx<- baseMthod->methodIndex 1252071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao cmpl offClassObject_vtableCount(%eax),%ecx # compare(methodIndex,vtableCount) 1252171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jae .LOP_INVOKE_SUPER_JUMBO_nsm # method not present in superclass 1252271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offClassObject_vtable(%eax),%eax # eax<- ...clazz->super->vtable 1252371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl (%eax,%ecx,4),%eax # eax<- vtable[methodIndex] 1252471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_invokeMethodJumbo 125253d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 125263d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1252771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* At this point: 1252871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx = null (needs to be resolved base method) 1252971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax = method->clazz 1253071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1253171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_JUMBO_resolve: 1253271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%eax) # method->clazz 1253371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG0(%esp) # arg0<- method->clazz 1253471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%ecx # ecx<- AAAAAAAA 1253571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $METHOD_VIRTUAL,OUT_ARG2(%esp) # arg2<- resolver method type 1253671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG1(%esp) # arg1<- ref 1253771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveMethod # eax<- call(clazz, ref, flags) 1253871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # got null? 1253971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,%ecx # ecx<- resolved base method 1254071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%eax) # restore method->clazz 1254171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_INVOKE_SUPER_JUMBO_continue # good to go - continue 1254271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown # handle exception 125433d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 125443d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 1254571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Throw a NoSuchMethodError with the method name as the message. 1254671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * ecx = resolved base method 12547f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 1254871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_SUPER_JUMBO_nsm: 1254971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_name(%ecx),%eax 1255071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao mov %eax,OUT_ARG1(%esp) 1255171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_errNoSuchMethod 125523d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1255371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_DIRECT_JUMBO */ 125543d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 125553d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee /* 1255671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * On entry: 1255771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * TMP_SPILL <- "this" register 1255871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Things a bit ugly on this path, but it's the less 1255971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * frequent one. We'll have to do some reloading. 125603d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee */ 1256171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_DIRECT_JUMBO_resolve: 1256271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SPILL_TMP1(%ecx) 125639f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 125649f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%ecx),%ecx # ecx<- self->method 1256571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl 2(rPC),%eax # reference AAAAAAAA 1256671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 1256771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $METHOD_DIRECT,OUT_ARG2(%esp) 1256871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG1(%esp) 1256971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %ecx,OUT_ARG0(%esp) 1257071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveMethod # eax<- call(clazz, ref, flags) 1257171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao UNSPILL_TMP1(%ecx) 1257271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1257371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne .LOP_INVOKE_DIRECT_JUMBO_finish 1257471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 125753d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1257671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_STATIC_JUMBO */ 125773d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1257871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_STATIC_JUMBO_continue: 1257971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl $METHOD_STATIC,%eax 1258071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl %eax,OUT_ARG2(%esp) # arg2<- flags 1258171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmResolveMethod # call(clazz,ref,flags) 1258271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax # got null? 1258371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jne common_invokeMethodJumbo 1258471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_exceptionThrown 125853d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1258671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* continuation for OP_INVOKE_INTERFACE_JUMBO */ 125873d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 1258871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LOP_INVOKE_INTERFACE_JUMBO_continue: 1258971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao call dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex) 1259071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao testl %eax,%eax 1259171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao je common_exceptionThrown 1259271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp common_invokeMethodJumbo 125933d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee 12594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size dvmAsmSisterStart, .-dvmAsmSisterStart 12595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmAsmSisterEnd 12596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmAsmSisterEnd: 12597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/entry.S */ 12599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 12600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 12601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 12602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 12603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 12604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 12605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 12606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 12607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 12608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 12612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 12613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 12614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .text 12617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdRun 12618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdRun, %function 12619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 126209f601a917c8878204482c37aec7005054b6776fabuzbee * bool dvmMterpStdRun(Thread* self) 12621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 12622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interpreter entry point. Returns changeInterp. 12623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 12624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 12625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdRun: 126269f601a917c8878204482c37aec7005054b6776fabuzbee movl 4(%esp), %ecx # get incoming rSELF 12627f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee push %ebp # save caller base pointer 126289f601a917c8878204482c37aec7005054b6776fabuzbee push %ecx # save rSELF at (%ebp) 12629f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %esp, %ebp # set our %ebp 12630f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/* 12631f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * At this point we've allocated two slots on the stack 12632f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * via push and stack is 8-byte aligned. Allocate space 12633f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * for 8 spill slots, 3 local slots, 5 arg slots + 2 slots for 12634f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * padding to bring us to 16-byte alignment 12635f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 12636f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee subl $(FRAME_SIZE-8), %esp 12637f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 12638f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/* Spill callee save regs */ 12639f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %edi,EDI_SPILL(%ebp) 12640f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %esi,ESI_SPILL(%ebp) 12641f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %ebx,EBX_SPILL(%ebp) 12642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Set up "named" registers */ 126449f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_pc(%ecx),rPC 126459f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_fp(%ecx),rFP 12646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Remember %esp for future "longjmp" */ 126489f601a917c8878204482c37aec7005054b6776fabuzbee movl %esp,offThread_bailPtr(%ecx) 12649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* How to start? */ 126519f601a917c8878204482c37aec7005054b6776fabuzbee movb offThread_entryPoint(%ecx),%al 12652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Normal start? */ 12654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryInstr,%al 12655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .Lnot_instr 12656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Normal case: start executing the instruction at rPC */ 12658f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 12659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 12660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.Lnot_instr: 12662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Reset to normal case */ 126639f601a917c8878204482c37aec7005054b6776fabuzbee movb $kInterpEntryInstr,offThread_entryPoint(%ecx) 12664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryReturn,%al 12665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_returnFromMethod 12666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpb $kInterpEntryThrow,%al 12667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 12668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx %al,%eax 12669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 12670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrBadEntryPoint,OUT_ARG0(%esp) 12671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call printf 12672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmAbort 12673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Not reached */ 12674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .global dvmMterpStdBail 12677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .type dvmMterpStdBail, %function 12678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 126799f601a917c8878204482c37aec7005054b6776fabuzbee * void dvmMterpStdBail(Thread* self, bool changeInterp) 12680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 12681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Restore the stack pointer and PC from the save point established on entry. 12682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is essentially the same as a longjmp, but should be cheaper. The 12683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * last instruction causes us to return to whoever called dvmMterpStdRun. 12684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 12685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We're not going to build a standard frame here, so the arg accesses will 12686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * look a little strange. 12687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 12688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 126899f601a917c8878204482c37aec7005054b6776fabuzbee * esp+4 (arg0) Thread* self 12690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * esp+8 (arg1) bool changeInterp 12691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 12692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectdvmMterpStdBail: 126939f601a917c8878204482c37aec7005054b6776fabuzbee movl 4(%esp),%ecx # grab self 12694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl 8(%esp),%eax # changeInterp to return reg 126959f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_bailPtr(%ecx),%esp # Restore "setjmp" esp 12696c11e0e14df2c0c4264e5cc6c3e96d14832cbecadbuzbee movl %esp,%ebp 12697c11e0e14df2c0c4264e5cc6c3e96d14832cbecadbuzbee addl $(FRAME_SIZE-8), %ebp # Restore %ebp at point of setjmp 12698f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl EDI_SPILL(%ebp),%edi 12699f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl ESI_SPILL(%ebp),%esi 12700f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl EBX_SPILL(%ebp),%ebx 12701f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl PREV_FP(%ebp),%ebp # restore caller's ebp 12702f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl $FRAME_SIZE,%esp # strip frame 12703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ret # return to dvmMterpStdRun's caller 12704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 12707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Strings 12708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 12709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .section .rodata 12710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrBadEntryPoint: 12711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Bad entry point %d\n" 12712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12713f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 12714f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/* 12715f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * FIXME: Should have the config/rebuild mechanism generate this 12716f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * for targets that need it. 12717f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee */ 12718f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 12719f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee/* Jump table */ 12720f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbeedvmAsmInstructionJmpTable = .LdvmAsmInstructionJmpTable 12721f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LdvmAsmInstructionJmpTable: 12722f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NOP 12723f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE 12724f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_FROM16 12725f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_16 12726f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_WIDE 12727f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_WIDE_FROM16 12728f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_WIDE_16 12729f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_OBJECT 12730f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_OBJECT_FROM16 12731f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_OBJECT_16 12732f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_RESULT 12733f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_RESULT_WIDE 12734f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_RESULT_OBJECT 12735f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MOVE_EXCEPTION 12736f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN_VOID 12737f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN 12738f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN_WIDE 12739f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN_OBJECT 12740f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_4 12741f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_16 12742f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST 12743f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_HIGH16 12744f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_WIDE_16 12745f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_WIDE_32 12746f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_WIDE 12747f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_WIDE_HIGH16 12748f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_STRING 12749f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_STRING_JUMBO 12750f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CONST_CLASS 12751f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MONITOR_ENTER 12752f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MONITOR_EXIT 12753f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CHECK_CAST 12754f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INSTANCE_OF 12755f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ARRAY_LENGTH 12756f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEW_INSTANCE 12757f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEW_ARRAY 12758f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FILLED_NEW_ARRAY 12759f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FILLED_NEW_ARRAY_RANGE 12760f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FILL_ARRAY_DATA 12761f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_THROW 12762f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_GOTO 12763f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_GOTO_16 12764f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_GOTO_32 12765f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_PACKED_SWITCH 12766f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPARSE_SWITCH 12767f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMPL_FLOAT 12768f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMPG_FLOAT 12769f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMPL_DOUBLE 12770f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMPG_DOUBLE 12771f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_CMP_LONG 12772f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_EQ 12773f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_NE 12774f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_LT 12775f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_GE 12776f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_GT 12777f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_LE 12778f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_EQZ 12779f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_NEZ 12780f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_LTZ 12781f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_GEZ 12782f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_GTZ 12783f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IF_LEZ 12784f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_3E 12785f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_3F 12786f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_40 12787f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_41 12788f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_42 12789f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_43 12790f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET 12791f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_WIDE 12792f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_OBJECT 12793f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_BOOLEAN 12794f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_BYTE 12795f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_CHAR 12796f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AGET_SHORT 12797f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT 12798f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_WIDE 12799f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_OBJECT 12800f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_BOOLEAN 12801f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_BYTE 12802f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_CHAR 12803f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_APUT_SHORT 12804f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET 12805f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_WIDE 12806f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_OBJECT 12807f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_BOOLEAN 12808f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_BYTE 12809f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_CHAR 12810f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_SHORT 12811f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT 12812f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_WIDE 12813f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_OBJECT 12814f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_BOOLEAN 12815f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_BYTE 12816f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_CHAR 12817f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_SHORT 12818f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET 12819f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_WIDE 12820f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_OBJECT 12821f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_BOOLEAN 12822f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_BYTE 12823f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_CHAR 12824f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_SHORT 12825f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT 12826f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_WIDE 12827f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_OBJECT 12828f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_BOOLEAN 12829f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_BYTE 12830f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_CHAR 12831f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_SHORT 12832f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_VIRTUAL 12833f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_SUPER 12834f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_DIRECT 12835f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_STATIC 12836f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_INTERFACE 12837f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_73 12838f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_VIRTUAL_RANGE 12839f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_SUPER_RANGE 12840f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_DIRECT_RANGE 12841f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_STATIC_RANGE 12842f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_INTERFACE_RANGE 12843f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_79 12844f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_UNUSED_7A 12845f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEG_INT 12846f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NOT_INT 12847f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEG_LONG 12848f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NOT_LONG 12849f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEG_FLOAT 12850f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_NEG_DOUBLE 12851f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_LONG 12852f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_FLOAT 12853f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_DOUBLE 12854f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_LONG_TO_INT 12855f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_LONG_TO_FLOAT 12856f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_LONG_TO_DOUBLE 12857f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FLOAT_TO_INT 12858f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FLOAT_TO_LONG 12859f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_FLOAT_TO_DOUBLE 12860f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DOUBLE_TO_INT 12861f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DOUBLE_TO_LONG 12862f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DOUBLE_TO_FLOAT 12863f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_BYTE 12864f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_CHAR 12865f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INT_TO_SHORT 12866f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_INT 12867f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_INT 12868f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_INT 12869f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_INT 12870f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_INT 12871f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_INT 12872f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_INT 12873f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_INT 12874f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_INT 12875f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_INT 12876f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_INT 12877f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_LONG 12878f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_LONG 12879f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_LONG 12880f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_LONG 12881f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_LONG 12882f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_LONG 12883f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_LONG 12884f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_LONG 12885f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_LONG 12886f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_LONG 12887f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_LONG 12888f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_FLOAT 12889f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_FLOAT 12890f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_FLOAT 12891f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_FLOAT 12892f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_FLOAT 12893f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_DOUBLE 12894f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_DOUBLE 12895f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_DOUBLE 12896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_DOUBLE 12897f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_DOUBLE 12898f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_INT_2ADDR 12899f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_INT_2ADDR 12900f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_INT_2ADDR 12901f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_INT_2ADDR 12902f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_INT_2ADDR 12903f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_INT_2ADDR 12904f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_INT_2ADDR 12905f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_INT_2ADDR 12906f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_INT_2ADDR 12907f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_INT_2ADDR 12908f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_INT_2ADDR 12909f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_LONG_2ADDR 12910f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_LONG_2ADDR 12911f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_LONG_2ADDR 12912f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_LONG_2ADDR 12913f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_LONG_2ADDR 12914f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_LONG_2ADDR 12915f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_LONG_2ADDR 12916f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_LONG_2ADDR 12917f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_LONG_2ADDR 12918f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_LONG_2ADDR 12919f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_LONG_2ADDR 12920f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_FLOAT_2ADDR 12921f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_FLOAT_2ADDR 12922f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_FLOAT_2ADDR 12923f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_FLOAT_2ADDR 12924f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_FLOAT_2ADDR 12925f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_DOUBLE_2ADDR 12926f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SUB_DOUBLE_2ADDR 12927f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_DOUBLE_2ADDR 12928f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_DOUBLE_2ADDR 12929f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_DOUBLE_2ADDR 12930f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_INT_LIT16 12931f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RSUB_INT 12932f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_INT_LIT16 12933f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_INT_LIT16 12934f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_INT_LIT16 12935f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_INT_LIT16 12936f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_INT_LIT16 12937f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_INT_LIT16 12938f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_ADD_INT_LIT8 12939f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RSUB_INT_LIT8 12940f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_MUL_INT_LIT8 12941f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_DIV_INT_LIT8 12942f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_REM_INT_LIT8 12943f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_AND_INT_LIT8 12944f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_OR_INT_LIT8 12945f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_XOR_INT_LIT8 12946f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHL_INT_LIT8 12947f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SHR_INT_LIT8 12948f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_USHR_INT_LIT8 12949f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_VOLATILE 12950f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_VOLATILE 12951f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_VOLATILE 12952f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_VOLATILE 12953f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_OBJECT_VOLATILE 12954f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_WIDE_VOLATILE 12955f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_WIDE_VOLATILE 12956f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_WIDE_VOLATILE 12957f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_WIDE_VOLATILE 12958f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_BREAKPOINT 12959f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_THROW_VERIFICATION_ERROR 12960f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_EXECUTE_INLINE 12961f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_EXECUTE_INLINE_RANGE 12962750d110b62cef538e193b6f91f5239b0c4b63ef1Andy McFadden.long .L_OP_INVOKE_OBJECT_INIT 12963f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_RETURN_VOID_BARRIER 12964f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_QUICK 12965f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_WIDE_QUICK 12966f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IGET_OBJECT_QUICK 12967f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_QUICK 12968f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_WIDE_QUICK 12969f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_OBJECT_QUICK 12970f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_VIRTUAL_QUICK 12971f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_VIRTUAL_QUICK_RANGE 12972f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_SUPER_QUICK 12973f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_INVOKE_SUPER_QUICK_RANGE 12974f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_IPUT_OBJECT_VOLATILE 12975f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SGET_OBJECT_VOLATILE 12976f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.long .L_OP_SPUT_OBJECT_VOLATILE 1297790f15431b24a4004fab2db70f273155fcd1c42a4Dan Bornstein.long .L_OP_DISPATCH_FF 1297871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_CONST_CLASS_JUMBO 1297971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_CHECK_CAST_JUMBO 1298071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_INSTANCE_OF_JUMBO 1298171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_NEW_INSTANCE_JUMBO 1298271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_NEW_ARRAY_JUMBO 1298371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_FILLED_NEW_ARRAY_JUMBO 1298471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_JUMBO 1298571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_WIDE_JUMBO 1298671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_OBJECT_JUMBO 1298771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_BOOLEAN_JUMBO 1298871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_BYTE_JUMBO 1298971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_CHAR_JUMBO 1299071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IGET_SHORT_JUMBO 1299171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_JUMBO 1299271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_WIDE_JUMBO 1299371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_OBJECT_JUMBO 1299471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_BOOLEAN_JUMBO 1299571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_BYTE_JUMBO 1299671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_CHAR_JUMBO 1299771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_IPUT_SHORT_JUMBO 1299871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_JUMBO 1299971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_WIDE_JUMBO 1300071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_OBJECT_JUMBO 1300171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_BOOLEAN_JUMBO 1300271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_BYTE_JUMBO 1300371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_CHAR_JUMBO 1300471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SGET_SHORT_JUMBO 1300571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_JUMBO 1300671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_WIDE_JUMBO 1300771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_OBJECT_JUMBO 1300871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_BOOLEAN_JUMBO 1300971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_BYTE_JUMBO 1301071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_CHAR_JUMBO 1301171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_SPUT_SHORT_JUMBO 1301271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_INVOKE_VIRTUAL_JUMBO 1301371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_INVOKE_SUPER_JUMBO 1301471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_INVOKE_DIRECT_JUMBO 1301571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_INVOKE_STATIC_JUMBO 1301671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_INVOKE_INTERFACE_JUMBO 1301771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_27FF 1301871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_28FF 1301971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_29FF 1302071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_2AFF 1302171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_2BFF 1302271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_2CFF 1302371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_2DFF 1302471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_2EFF 1302571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_2FFF 1302671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_30FF 1302771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_31FF 1302871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_32FF 1302971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_33FF 1303071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_34FF 1303171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_35FF 1303271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_36FF 1303371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_37FF 1303471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_38FF 1303571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_39FF 1303671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_3AFF 1303771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_3BFF 1303871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_3CFF 1303971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_3DFF 1304071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_3EFF 1304171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_3FFF 1304271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_40FF 1304371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_41FF 1304471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_42FF 1304571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_43FF 1304671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_44FF 1304771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_45FF 1304871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_46FF 1304971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_47FF 1305071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_48FF 1305171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_49FF 1305271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_4AFF 1305371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_4BFF 1305471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_4CFF 1305571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_4DFF 1305671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_4EFF 1305771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_4FFF 1305871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_50FF 1305971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_51FF 1306071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_52FF 1306171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_53FF 1306271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_54FF 1306371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_55FF 1306471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_56FF 1306571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_57FF 1306671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_58FF 1306771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_59FF 1306871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_5AFF 1306971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_5BFF 1307071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_5CFF 1307171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_5DFF 1307271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_5EFF 1307371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_5FFF 1307471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_60FF 1307571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_61FF 1307671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_62FF 1307771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_63FF 1307871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_64FF 1307971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_65FF 1308071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_66FF 1308171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_67FF 1308271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_68FF 1308371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_69FF 1308471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_6AFF 1308571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_6BFF 1308671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_6CFF 1308771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_6DFF 1308871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_6EFF 1308971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_6FFF 1309071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_70FF 1309171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_71FF 1309271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_72FF 1309371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_73FF 1309471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_74FF 1309571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_75FF 1309671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_76FF 1309771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_77FF 1309871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_78FF 1309971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_79FF 1310071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_7AFF 1310171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_7BFF 1310271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_7CFF 1310371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_7DFF 1310471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_7EFF 1310571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_7FFF 1310671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_80FF 1310771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_81FF 1310871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_82FF 1310971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_83FF 1311071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_84FF 1311171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_85FF 1311271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_86FF 1311371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_87FF 1311471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_88FF 1311571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_89FF 1311671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_8AFF 1311771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_8BFF 1311871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_8CFF 1311971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_8DFF 1312071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_8EFF 1312171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_8FFF 1312271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_90FF 1312371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_91FF 1312471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_92FF 1312571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_93FF 1312671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_94FF 1312771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_95FF 1312871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_96FF 1312971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_97FF 1313071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_98FF 1313171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_99FF 1313271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_9AFF 1313371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_9BFF 1313471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_9CFF 1313571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_9DFF 1313671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_9EFF 1313771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_9FFF 1313871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A0FF 1313971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A1FF 1314071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A2FF 1314171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A3FF 1314271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A4FF 1314371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A5FF 1314471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A6FF 1314571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A7FF 1314671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A8FF 1314771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_A9FF 1314871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_AAFF 1314971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_ABFF 1315071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_ACFF 1315171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_ADFF 1315271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_AEFF 1315371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_AFFF 1315471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B0FF 1315571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B1FF 1315671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B2FF 1315771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B3FF 1315871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B4FF 1315971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B5FF 1316071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B6FF 1316171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B7FF 1316271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B8FF 1316371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_B9FF 1316471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_BAFF 1316571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_BBFF 1316671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_BCFF 1316771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_BDFF 1316871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_BEFF 1316971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_BFFF 1317071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C0FF 1317171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C1FF 1317271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C2FF 1317371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C3FF 1317471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C4FF 1317571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C5FF 1317671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C6FF 1317771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C7FF 1317871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C8FF 1317971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_C9FF 1318071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_CAFF 1318171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_CBFF 1318271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_CCFF 1318371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_CDFF 1318471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_CEFF 1318571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_CFFF 1318671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D0FF 1318771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D1FF 1318871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D2FF 1318971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D3FF 1319071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D4FF 1319171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D5FF 1319271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D6FF 1319371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D7FF 1319471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D8FF 1319571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_D9FF 1319671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_DAFF 1319771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_DBFF 1319871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_DCFF 1319971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_DDFF 1320071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_DEFF 1320171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_DFFF 1320271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E0FF 1320371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E1FF 1320471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E2FF 1320571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E3FF 1320671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E4FF 1320771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E5FF 1320871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E6FF 1320971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E7FF 1321071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E8FF 1321171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_E9FF 1321271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_EAFF 1321371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_EBFF 1321471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_ECFF 1321571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_EDFF 1321671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_EEFF 1321771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_EFFF 1321871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F0FF 1321971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F1FF 1322071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F2FF 1322171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F3FF 1322271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F4FF 1322371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F5FF 1322471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F6FF 1322571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F7FF 1322671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F8FF 1322771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_F9FF 1322871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_FAFF 1322971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_FBFF 1323071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_FCFF 1323171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_FDFF 1323271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_UNUSED_FEFF 1323371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.long .L_OP_THROW_VERIFICATION_ERROR_JUMBO 13234f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee 13235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* File: x86/footer.S */ 13236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 13237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 13238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 13239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 13240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 13241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 13242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 13243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 13244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 13245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 13246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 13249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 13250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 13252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common subroutines and data. 13253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 132557520ee7ff226e12e06818561b15741d2575072e3buzbee#if defined(WITH_JIT) 132567520ee7ff226e12e06818561b15741d2575072e3buzbee/* 13257dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * JIT-related re-entries into the interpreter. In general, if the 13258dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * exit from a translation can at some point be chained, the entry 13259dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * here requires that control arrived via a call, and that the "rp" 13260dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * on TOS is actually a pointer to a 32-bit cell containing the Dalvik PC 13261dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * of the next insn to handle. If no chaining will happen, the entry 13262dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * should be reached via a direct jump and rPC set beforehand. 132637520ee7ff226e12e06818561b15741d2575072e3buzbee */ 13264dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee 132657520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpPunt 13266dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/* 13267dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * The compiler will generate a jump to this entry point when it is 13268dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * having difficulty translating a Dalvik instruction. We must skip 13269dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * the code cache lookup & prevent chaining to avoid bouncing between 13270dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * the interpreter and code cache. rPC must be set on entry. 13271dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */ 132727520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpPunt: 13273dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#if defined(WITH_JIT_TUNING) 13274dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl rPC, OUT_ARG0(%esp) 13275dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee call dvmBumpPunt 13276dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#endif 13277dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee FETCH_INST_R %edx 13278dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee GOTO_NEXT_R %edx 13279dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee 132807520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpSingleStep 13281dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/* 13282dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Return to the interpreter to handle a single instruction. 13283dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Should be reached via a call. 13284dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * On entry: 13285dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * 0(%esp) <= native return address within trace 13286dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * rPC <= Dalvik PC of this instruction 13287dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * OUT_ARG0+4(%esp) <= Dalvik PC of next instruction 13288dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */ 132897520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpSingleStep: 13290dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee pop %eax 132919f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF, %ecx 13292dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl OUT_ARG0(%esp), %edx 132939f601a917c8878204482c37aec7005054b6776fabuzbee movl %eax,offThread_jitResumeNPC(%ecx) 132949f601a917c8878204482c37aec7005054b6776fabuzbee movl %edx,offThread_jitResumeDPC(%ecx) 132959f601a917c8878204482c37aec7005054b6776fabuzbee movl $kInterpEntryInstr,offThread_entryPoint(%ecx) 13296dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl $1,rINST # changeInterp <= true 13297dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee jmp common_gotoBail 13298dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee 132997520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpNoChainNoProfile 13300dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/* 13301dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Return from the translation cache to the interpreter to do method 13302dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * invocation. Check if the translation exists for the callee, but don't 13303dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * chain to it. rPC must be set on entry. 13304dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */ 133057520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpNoChainNoProfile: 13306dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#if defined(WITH_JIT_TUNING) 13307dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee call dvmBumpNoChain 13308dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#endif 13309dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl rPC,OUT_ARG0(%esp) 13310cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng call dvmJitGetTraceAddr # is there a translation? 133119f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx # ecx <- self 13312dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl %eax,offThread_inJitCodeCache(%ecx) # set inJitCodeCache flag 13313dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee cmpl $0, %eax 13314dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee jz 1f 13315dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee call *%eax # exec translation if we've got one 13316dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee # won't return 13317dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee1: 13318dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee FETCH_INST_R %edx 13319dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee GOTO_NEXT_R %edx 13320dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee 13321dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/* 13322dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Return from the translation cache and immediately request a 13323dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * translation fro the exit target, but don't attempt to chain. 13324dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * rPC set on entry. 13325dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */ 133267520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpTraceSelectNoChain 133277520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpTraceSelectNoChain: 13328dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#if defined(WITH_JIT_TUNING) 13329dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee call dvmBumpNoChain 13330dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#endif 13331dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl rPC,OUT_ARG0(%esp) 13332cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng call dvmJitGetTraceAddr # is there a translation? 133339f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 13334dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee cmpl $0,%eax 13335dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl %eax,offThread_inJitCodeCache(%ecx) # set inJitCodeCache flag 13336dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee jz 1f 13337dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee call *%eax # jump to tranlation 13338dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee # won't return 13339dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee 13340dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/* No Translation - request one */ 13341dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee1: 13342dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee GET_JIT_PROF_TABLE %ecx %eax 13343dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee cmpl $0, %eax # JIT enabled? 13344dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee jnz 2f # Request one if so 13345dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee FETCH_INST_R %edx # Continue interpreting if not 13346dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee GOTO_NEXT_R %edx 13347dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee2: 13348dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl $kJitTSelectRequestHot,rINST # ask for trace select 13349dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee jmp common_selectTrace 13350dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee 13351dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/* 13352dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Return from the translation cache and immediately request a 13353dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * translation for the exit target. Reached via a call, and 13354dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * (TOS)->rPC. 13355dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */ 133567520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpTraceSelect 133577520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpTraceSelect: 13358dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee pop rINST # save chain cell address in callee save reg 13359dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl (rINST),rPC 13360dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl rPC,OUT_ARG0(%esp) 13361cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng call dvmJitGetTraceAddr # is there a translation? 13362dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee cmpl $0,%eax 13363dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee jz 1b # no - ask for one 13364dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl %eax,OUT_ARG0(%esp) 13365dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee# FIXME - need to adjust rINST to beginning of sequence 13366dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl rINST,OUT_ARG1(%esp) 13367dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee call dvmJitChain # Attempt dvmJitChain(codeAddr,chainAddr) 13368dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee cmpl $0,%eax # Success? 13369dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee jz toInterpreter # didn't chain - interpret 13370dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee call *%eax 13371dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee # won't return 13372dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee 13373dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/* 13374dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Placeholder entries for x86 JIT 13375dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */ 133767520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpBackwardBranch 133777520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpBackwardBranch: 133787520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpNormal 133797520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpNormal: 133807520ee7ff226e12e06818561b15741d2575072e3buzbee .global dvmJitToInterpNoChain 133817520ee7ff226e12e06818561b15741d2575072e3buzbeedvmJitToInterpNoChain: 13382dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbeetoInterpreter: 133837520ee7ff226e12e06818561b15741d2575072e3buzbee jmp common_abort 133847520ee7ff226e12e06818561b15741d2575072e3buzbee#endif 133857520ee7ff226e12e06818561b15741d2575072e3buzbee 13386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 13387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code when a backwards branch is taken 13388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 13389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 13390f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * ebx (a.k.a. rINST) -> PC adjustment in 16-bit words 13391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_backwardBranch: 133939f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 133949f601a917c8878204482c37aec7005054b6776fabuzbee call common_periodicChecks # rPC and ecx/rSELF preserved 13395dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#if defined(WITH_JIT) 13396dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee GET_JIT_PROF_TABLE %ecx %edx 13397f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC_INDEXED rINST 13398dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee cmpl $0,%edx 13399f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 13400dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee jz 1f # Profiling off - continue 13401dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee .global updateProfile 13402dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbeeupdateProfile: 13403dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbeecommon_updateProfile: 13404dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee # quick & dirty hash 13405dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl rPC, %eax 13406dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee shrl $12, %eax 13407dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee xorl rPC, %eax 13408dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee andl $((1<<JIT_PROF_SIZE_LOG_2)-1),%eax 13409dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee decb (%edx,%eax) 13410dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee jz 2f 13411dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee1: 13412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 13413dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee2: 13414dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/* 13415dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * Here, we switch to the debug interpreter to request 13416dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * trace selection. First, though, check to see if there 13417dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * is already a native translation in place (and, if so, 13418dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee * jump to it now. 13419dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee */ 134209f601a917c8878204482c37aec7005054b6776fabuzbee GET_JIT_THRESHOLD %ecx rINST # leaves rSELF in %ecx 13421dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee EXPORT_PC 13422dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movb rINSTbl,(%edx,%eax) # reset counter 134239f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx,rINST # preserve rSELF 13424dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl rPC,OUT_ARG0(%esp) 13425cfdeca37fcaa27c37bad5077223e4d1e87f1182eBen Cheng call dvmJitGetTraceAddr # already have one? 13426dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl %eax,offThread_inJitCodeCache(rINST) # set the inJitCodeCache flag 13427dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee cmpl $0,%eax 13428dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee jz 1f 13429dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee call *%eax # FIXME: decide call vs/ jmp!. No return either way 13430dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee1: 13431dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl $kJitTSelectRequest,%eax 13432dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee # On entry, eax<- jitState, rPC valid 13433dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbeecommon_selectTrace: 134349f601a917c8878204482c37aec7005054b6776fabuzbee 134359f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 134369f601a917c8878204482c37aec7005054b6776fabuzbee movl %eax,offThread_jitState(%ecx) 134379f601a917c8878204482c37aec7005054b6776fabuzbee movl $kInterpEntryInstr,offThread_entryPoint(%ecx) 13438dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee movl $1,rINST 13439dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee jmp common_gotoBail 13440dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#else 13441dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee ADVANCE_PC_INDEXED rINST 13442dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee FETCH_INST 13443dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee GOTO_NEXT 13444dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#endif 13445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13446c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13447c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13448c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch/* 1344971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * Common code for jumbo method invocation. 1345071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * 1345171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * On entry: 1345271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * eax = Method* methodToCall 1345371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * rINSTw trashed, must reload 1345471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1345571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1345671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhaocommon_invokeMethodJumbo: 1345771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LinvokeNewJumbo: 1345871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1345971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao /* 1346071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao * prepare to copy args to "outs" area of current frame 1346171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao */ 1346271eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 6(rPC),rINST # rINST<- BBBB 1346371eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movzwl 8(rPC), %ecx # %ecx<- CCCC 1346471eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao ADVANCE_PC 2 # adjust pc to make return similar 1346571eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao SAVEAREA_FROM_FP %edx # %edx<- &StackSaveArea 1346671eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao test rINST, rINST 1346771eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao movl rINST, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- BBBB 1346871eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jz .LinvokeArgsDone # no args; jump to args done 1346971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao jmp .LinvokeRangeArgs # handle args like invoke range 1347071eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao 1347171eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao/* 13472c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Common code for method invocation with range. 13473c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * 13474c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * On entry: 13475c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * eax = Method* methodToCall 13476f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINSTw trashed, must reload 13477c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 13478c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13479c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodRange: 13480c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewRange: 13481c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13482c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 13483c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * prepare to copy args to "outs" area of current frame 13484c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 13485c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13486f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC),rINST # rINST<- AA 13487c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl 4(rPC), %ecx # %ecx<- CCCC 13488f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVEAREA_FROM_FP %edx # %edx<- &StackSaveArea 13489f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee test rINST, rINST 13490f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- AA 13491c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jz .LinvokeArgsDone # no args; jump to args done 13492c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13493c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13494c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 13495c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, %ecx=CCCC, LOCAL0_OFFSET(%ebp)=count, %edx=&outs (&stackSaveArea) 13496c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * (very few methods have > 10 args; could unroll for common cases) 13497c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 13498c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 1349971eee1f0c2eb514585fdbee16730c9c2209e8f68jeffhao.LinvokeRangeArgs: 13500c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ebx, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- save %ebx 13501c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea (rFP, %ecx, 4), %ecx # %ecx<- &vCCCC 13502c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shll $2, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- offset 13503c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl LOCAL0_OFFSET(%ebp), %edx # %edx<- update &outs 13504c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shrl $2, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- offset 13505c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1: 13506c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (%ecx), %ebx # %ebx<- vCCCC 13507c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%ecx), %ecx # %ecx<- &vCCCC++ 13508c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl $1, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET<- LOCAL0_OFFSET-- 13509c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ebx, (%edx) # *outs<- vCCCC 13510c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%edx), %edx # outs++ 13511c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne 1b # loop if count (LOCAL0_OFFSET(%ebp)) not zero 13512c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ebx # %ebx<- restore %ebx 13513c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp .LinvokeArgsDone # continue 13514c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13515c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 13516c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax is "Method* methodToCall", the method we're trying to call 13517c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * prepare to copy args to "outs" area of current frame 13518c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 13519c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13520c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birchcommon_invokeMethodNoRange: 13521c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNewNoRange: 13522f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl 1(rPC),rINST # rINST<- BA 13523f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- BA 13524c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shrl $4, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET(%ebp)<- B 13525c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je .LinvokeArgsDone # no args; jump to args done 13526c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl 4(rPC), %ecx # %ecx<- GFED 13527f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVEAREA_FROM_FP %edx # %edx<- &StackSaveArea 13528c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13529c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 13530c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, %ecx=GFED, LOCAL0_OFFSET(%ebp)=count, %edx=outs 13531c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 13532c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13533c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNonRange: 13534c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $2, LOCAL0_OFFSET(%ebp) # compare LOCAL0_OFFSET(%ebp) to 2 13535c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- GFED 13536c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl 1f # handle 1 arg 13537c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je 2f # handle 2 args 13538c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $4, LOCAL0_OFFSET(%ebp) # compare LOCAL0_OFFSET(%ebp) to 4 13539c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl 3f # handle 3 args 13540c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch je 4f # handle 4 args 13541c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch5: 13542f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee andl $15, rINST # rINSTw<- A 13543c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 13544f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (rFP, rINST, 4), %ecx # %ecx<- vA 13545c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vA 13546c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 13547c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch4: 13548c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $12, %ecx # %ecx<- G 13549c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 13550c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vG 13551c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vG 13552c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 13553c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch3: 13554c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x0f00, %ecx # %ecx<- 0F00 13555c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $8, %ecx # %ecx<- F 13556c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 13557c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vF 13558c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vF 13559c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 13560c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch2: 13561c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x00f0, %ecx # %ecx<- 00E0 13562c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shr $4, %ecx # %ecx<- E 13563c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea -4(%edx), %edx # %edx<- update &outs; &outs-- 13564c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vE 13565c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, (%edx) # *outs<- vE 13566c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %ecx # %ecx<- GFED 13567c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch1: 13568c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch and $0x000f, %ecx # %ecx<- 000D 13569c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl (rFP, %ecx, 4), %ecx # %ecx<- vD 13570c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, -4(%edx) # *--outs<- vD 13571c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch0: 13572c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13573c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 13574c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax is "Method* methodToCall", the method we're trying to call 13575c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * find space for the new stack frame, check for overflow 13576c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 13577c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13578c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeArgsDone: 13579c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl offMethod_registersSize(%eax), %edx # %edx<- methodToCall->regsSize 13580c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movzwl offMethod_outsSize(%eax), %ecx # %ecx<- methodToCall->outsSize 13581c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, LOCAL0_OFFSET(%ebp) # LOCAL0_OFFSET<- methodToCall 13582c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shl $2, %edx # %edx<- update offset 13583f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVEAREA_FROM_FP %eax # %eax<- &StackSaveArea 13584c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl %edx, %eax # %eax<- newFP; (old savearea - regsSize) 135859f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%edx # %edx<- pthread 13586c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, LOCAL1_OFFSET(%ebp) # LOCAL1_OFFSET(%ebp)<- &outs 13587c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch subl $sizeofStackSaveArea, %eax # %eax<- newSaveArea (stack save area using newFP) 135889f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_interpStackEnd(%edx), %edx # %edx<- self->interpStackEnd 135899f601a917c8878204482c37aec7005054b6776fabuzbee movl %edx, LOCAL2_OFFSET(%ebp) # LOCAL2_OFFSET<- self->interpStackEnd 13590c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch shl $2, %ecx # %ecx<- update offset for outsSize 13591c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, %edx # %edx<- newSaveArea 13592c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch sub %ecx, %eax # %eax<- bottom; (newSaveArea - outsSize) 13593c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp LOCAL2_OFFSET(%ebp), %eax # compare interpStackEnd and bottom 13594c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL0_OFFSET(%ebp), %eax # %eax<- restore methodToCall 13595c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jl .LstackOverflow # handle frame overflow 13596c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13597c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 13598c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * set up newSaveArea 13599c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 13600c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13601c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#ifdef EASY_GDB 13602f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVEAREA_FROM_FP %ecx # %ecx<- &StackSaveArea 13603c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %ecx, offStackSaveArea_prevSave(%edx) # newSaveArea->prevSave<- &outs 13604c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch#endif 13605c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl rFP, offStackSaveArea_prevFrame(%edx) # newSaveArea->prevFrame<- rFP 13606f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rPC, offStackSaveArea_savedPc(%edx) # newSaveArea->savedPc<- rPC 13607c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch testl $ACC_NATIVE, offMethod_accessFlags(%eax) # check for native call 13608c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, offStackSaveArea_method(%edx) # newSaveArea->method<- method to call 13609c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne .LinvokeNative # handle native call 13610c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13611c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 136129f601a917c8878204482c37aec7005054b6776fabuzbee * Update "self" values for the new method 13613c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFp 13614c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 13615c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13616c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offMethod_clazz(%eax), %edx # %edx<- method->clazz 136179f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx # %ecx<- pthread 13618c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offClassObject_pDvmDex(%edx), %edx # %edx<- method->clazz->pDvmDex 136199f601a917c8878204482c37aec7005054b6776fabuzbee movl %eax, offThread_method(%ecx) # self->method<- methodToCall 136209f601a917c8878204482c37aec7005054b6776fabuzbee movl %edx, offThread_methodClassDex(%ecx) # self->methodClassDex<- method->clazz->pDvmDex 13621c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl offMethod_insns(%eax), rPC # rPC<- methodToCall->insns 13622c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), rFP # rFP<- newFP 136239f601a917c8878204482c37aec7005054b6776fabuzbee movl rFP, offThread_curFrame(%ecx) # self->curFrame<- newFP 13624f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 13625c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch GOTO_NEXT # jump to methodToCall->insns 13626c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13627c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch /* 13628c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * Prep for the native call 13629c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch * %eax=methodToCall, LOCAL1_OFFSET(%ebp)=newFP, %edx=newSaveArea 13630c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch */ 13631c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13632c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch.LinvokeNative: 136339f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx # %ecx<- pthread 13634c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, OUT_ARG1(%esp) # push parameter methodToCall 13635d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl offThread_jniLocal_topCookie(%ecx), %eax # %eax<- self->localRef->... 13636d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl %eax, offStackSaveArea_localRefCookie(%edx) # newSaveArea->localRefCookie<- top 13637c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %edx, OUT_ARG4(%esp) # save newSaveArea 13638c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl LOCAL1_OFFSET(%ebp), %edx # %edx<- newFP 136399f601a917c8878204482c37aec7005054b6776fabuzbee movl %edx, offThread_curFrame(%ecx) # self->self->curFrame<- newFP 136409f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx, OUT_ARG3(%esp) # save self->self 136419f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx, OUT_ARG2(%esp) # push parameter self->self 136429f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx # %ecx<- pthread 13643c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG1(%esp), %eax # %eax<- methodToCall 136449f601a917c8878204482c37aec7005054b6776fabuzbee lea offThread_retval(%ecx), %ecx # %ecx<- &retval 136459f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx, OUT_ARG0(%esp) # push parameter pthread 13646c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch push %edx # push parameter newFP 13647c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13648c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch call *offMethod_nativeFunc(%eax) # call methodToCall->nativeFunc 13649c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch lea 4(%esp), %esp 13650c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl OUT_ARG4(%esp), %ecx # %ecx<- newSaveArea 136519f601a917c8878204482c37aec7005054b6776fabuzbee movl OUT_ARG3(%esp), %eax # %eax<- self->self 13652d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl offStackSaveArea_localRefCookie(%ecx), %edx # %edx<- old top 13653c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch cmp $0, offThread_exception(%eax) # check for exception 136549f601a917c8878204482c37aec7005054b6776fabuzbee movl rFP, offThread_curFrame(%eax) # self->self->curFrame<- rFP 13655d5ab726b65d7271be261864c7e224fb90bfe06e0Andy McFadden movl %edx, offThread_jniLocal_topCookie(%eax) # new top <- old top 13656c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_exceptionThrown # handle exception 13657f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 13658f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 13659f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx # jump to next instruction 13660c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 136616ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden.LstackOverflow: # eax=methodToCall 136626ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden movl %eax, OUT_ARG1(%esp) # push parameter methodToCall 136639f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax # %eax<- self 13664c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch movl %eax, OUT_ARG0(%esp) # push parameter self 136656ed1a0f396a1857c31b486d3e93ee2dbeb49a6cdAndy McFadden call dvmHandleStackOverflow # call: (Thread* self, Method* meth) 13666c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jmp common_exceptionThrown # handle exception 13667c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13668c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch 13669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 13670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Do we need the thread to be suspended or have debugger/profiling activity? 13671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 13672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * On entry: 13673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ebx -> PC adjustment in 16-bit words (must be preserved) 136749f601a917c8878204482c37aec7005054b6776fabuzbee * ecx -> SELF pointer 136759f601a917c8878204482c37aec7005054b6776fabuzbee * reentry type, e.g. kInterpEntryInstr stored in rSELF->entryPoint 13676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 13677f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * Note: A call will normally kill %eax and %ecx. To 13678f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * streamline the normal case, this routine will preserve 13679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * %ecx in addition to the normal caller save regs. The save/restore 13680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is a bit ugly, but will happen in the relatively uncommon path. 13681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: Basic-block style Jit will need a hook here as well. Fold it into 13682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the suspendCount check so we can get both in 1 shot. 13683cb3081f675109049e63380170b60871e8275f9a8buzbee * TUNING: Improve scheduling here & do initial single test for all. 13684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_periodicChecks: 136869f601a917c8878204482c37aec7005054b6776fabuzbee cmpl $0,offThread_suspendCount(%ecx) # non-zero suspendCount? 13687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne 1f 13688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13689f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee6: 136909f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_pInterpBreak(%ecx),%eax # eax <- &interpBreak 13691cb3081f675109049e63380170b60871e8275f9a8buzbee cmpl $0,(%eax) # something interesting happening? 13692cb3081f675109049e63380170b60871e8275f9a8buzbee jne 3f # yes - switch interpreters 13693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ret 13694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Check for suspend */ 13696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project1: 13697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* At this point, the return pointer to the caller of 13698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * common_periodicChecks is on the top of stack. We need to preserve 136999f601a917c8878204482c37aec7005054b6776fabuzbee * SELF(ecx). 13700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The outgoing profile is: 13701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bool dvmCheckSuspendPending(Thread* self) 13702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Because we reached here via a call, go ahead and build a new frame. 13703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13704f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # need for precise GC 137059f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx,%eax # eax<- self 13706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project push %ebp 13707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %esp,%ebp 13708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subl $24,%esp 13709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 13710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmCheckSuspendPending 13711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addl $24,%esp 13712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pop %ebp 137139f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 13714f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee 13715f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee /* 13716f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee * Need to check to see if debugger or profiler flags got set 13717f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee * while we were suspended. 13718f079e1d5c51fc33ab537bbdfc79cbac8e771d7e9buzbee */ 137190d615c3ce5bf97ae65b9347ee77968f38620d5e8Andy McFadden jmp 6b 13720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Switch interpreters */ 13722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Note: %ebx contains the 16-bit word offset to be applied to rPC to 13723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "complete" the interpretation of backwards branches. In effect, we 13724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * are completing the interpretation of the branch instruction here, 13725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and the new interpreter will resume interpretation at the branch 13726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * target. However, a switch request recognized during the handling 13727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * of a return from method instruction results in an immediate abort, 13728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and the new interpreter will resume by re-interpreting the return 13729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction. 13730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project3: 13732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project leal (rPC,%ebx,2),rPC # adjust pc to show target 137339f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx # bail expect SELF already loaded 13734f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl $1,rINST # set changeInterp to true 13735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_gotoBail 13736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 13739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Common code for handling a return instruction 13740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_returnFromMethod: 137429f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 13743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Set entry mode in case we bail */ 137449f601a917c8878204482c37aec7005054b6776fabuzbee movb $kInterpEntryReturn,offThread_entryPoint(%ecx) 13745f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee xorl rINST,rINST # zero offset in case we switch interps 13746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call common_periodicChecks # Note: expects %ecx to be preserved 13747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13748f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SAVEAREA_FROM_FP %eax # eax<- saveArea (old) 13749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStackSaveArea_prevFrame(%eax),rFP # rFP<- prevFrame 13750f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (offStackSaveArea_method-sizeofStackSaveArea)(rFP),rINST 13751f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee cmpl $0,rINST # break? 13752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_gotoBail # break frame, bail out completely 13753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offStackSaveArea_savedPc(%eax),rPC # pc<- saveArea->savedPC 137559f601a917c8878204482c37aec7005054b6776fabuzbee movl rINST,offThread_method(%ecx) # self->method = newSave->meethod 137569f601a917c8878204482c37aec7005054b6776fabuzbee movl rFP,offThread_curFrame(%ecx) # self->curFrame = fp 13757f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl offMethod_clazz(rINST),%eax # eax<- method->clazz 13758f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 3 %edx 13759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offClassObject_pDvmDex(%eax),%eax # eax<- method->clazz->pDvmDex 13760f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 3 137619f601a917c8878204482c37aec7005054b6776fabuzbee movl %eax,offThread_methodClassDex(%ecx) 13762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* not bailing - restore entry mode to default */ 137639f601a917c8878204482c37aec7005054b6776fabuzbee movb $kInterpEntryInstr,offThread_entryPoint(%ecx) 13764f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %edx 13765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 13767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Prepare to strip the current frame and "longjump" back to caller of 13768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * dvmMterpStdRun. 13769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 13770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * on entry: 13771f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * rINST holds changeInterp 137729f601a917c8878204482c37aec7005054b6776fabuzbee * ecx holds self pointer 13773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 137749f601a917c8878204482c37aec7005054b6776fabuzbee * expected profile: dvmMterpStdBail(Thread *self, bool changeInterp) 13775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_gotoBail: 137779f601a917c8878204482c37aec7005054b6776fabuzbee movl rPC,offThread_pc(%ecx) # export state to self 137789f601a917c8878204482c37aec7005054b6776fabuzbee movl rFP,offThread_fp(%ecx) 137799f601a917c8878204482c37aec7005054b6776fabuzbee movl %ecx,OUT_ARG0(%esp) # self in arg0 13780f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl rINST,OUT_ARG1(%esp) # changeInterp in arg1 13781f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee call dvmMterpStdBail # bail out.... 13782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 137859f601a917c8878204482c37aec7005054b6776fabuzbee * After returning from a "selfd" function, pull out the updated values 13786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and start executing at the next instruction. 13787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project common_resumeAfterGlueCall: 137899f601a917c8878204482c37aec7005054b6776fabuzbee LOAD_PC_FP_FROM_SELF 13790f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST 13791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 13792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 13794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Integer divide or mod by zero 13795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errDivideByZero: 13797f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 13798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrArithmeticException,%eax 13799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 13800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrDivideByZero,%eax 13801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 13802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 13803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 13804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 13806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size. 13807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNegativeArraySize: 13809f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 13810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNegativeArraySizeException,%eax 13811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 13812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 13813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 13814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 13815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 13816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 13818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Attempt to allocate an array with a negative size. 13819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNoSuchMethod: 13821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13822f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 13823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNoSuchMethodError,%eax 13824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 13825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 13826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 13827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 13828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 13829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 13831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Hit a null object when we weren't expecting one. Export the PC, throw a 13832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * NullPointerException and goto the exception processing code. 13833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errNullObject: 13835f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 13836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $.LstrNullPointerException,%eax 13837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 13838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project xorl %eax,%eax 13839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 13840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmThrowException 13841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 13842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 13844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array index exceeds max. 138453e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee * On entry: 138463e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee * eax <- array object 138473e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee * ecx <- index 13848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_errArrayIndex: 13850f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 138513e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee movl offArrayObject_length(%eax), %eax 138523e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee movl %ecx,OUT_ARG0(%esp) 13853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 138543e1bbffab14075a340ad0165c6ada6a43875a01fbuzbee call dvmThrowAIOOBE # dvmThrowAIOO(index, length) 13855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_exceptionThrown 13856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 13858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Somebody has thrown an exception. Handle it. 13859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 13860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the exception processing code returns to us (instead of falling 13861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * out of the interpreter), continue with whatever the next instruction 13862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * now happens to be. 13863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 13864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This does not return. 13865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_exceptionThrown: 138679f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 138689f601a917c8878204482c37aec7005054b6776fabuzbee movl rPC,offThread_pc(%ecx) 138699f601a917c8878204482c37aec7005054b6776fabuzbee movl rFP,offThread_fp(%ecx) 13870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 13871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmMterp_exceptionThrown 13872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp common_resumeAfterGlueCall 13873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcommon_abort: 13875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $0xdeadf00d,%eax 13876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call *%eax 13877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 13880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Strings 13881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .section .rodata 13884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNullPointerException: 13885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NullPointerException;" 13886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrArithmeticException: 13887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/ArithmeticException;" 13888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrDivideByZero: 13889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "divide by zero" 13890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNegativeArraySizeException: 13891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NegativeArraySizeException;" 13892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrInstantiationError: 13893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InstantiationError;" 13894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.LstrNoSuchMethodError: 13895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/NoSuchMethodError;" 13896f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LstrInternalErrorA: 13897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "Ljava/lang/InternalError;" 13898f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee.LstrFilledNewArrayNotImplA: 13899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .asciz "filled-new-array only implemented for 'int'" 13900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 13901